对CPP的情况感到困惑

Confused about if condition CPP

本文关键字:情况 CPP      更新时间:2023-10-16

对if条件感到困惑,它是如何执行以下语句的

if(1 && (1 || 0) != 0)  or  if(1 || (1 && 0) != 0)

在上面的if语句中,执行/验证语句的顺序是什么?(从左到右或从右到左)如果从左到右,那么如果第一个参数/表达式为真,它是否评估第二个表达式/参数?逻辑与和或操作符是否都成立?

谢谢。

如果第一个操作数的计算结果为false,则逻辑&&会短路(因为false && x对所有x都是false)

如果第一个操作数求值为true,则逻辑||短路(因为true || x对所有x都是true)

它们都是从左到右求值

从左到右

  1. 首先执行1。然后执行(1 || 0) != 0。为此,它执行1 || 0 -> true,所以整个东西都是true。
  2. 首先执行1 -它是true,所以它短路并返回true。

从左到右。||如果第一个表达式为真则短路,&&如果第一个表达式为假

这两件事根本不同,请阅读D摩根定律!s

让我们一步一步来分析:

(1 || 0)变成true,因为1短路了表达式

所以(1 || 0) != 0就是true

1 && true根据逻辑&&操作符

or||的define/关键字,但第一部分已经为真,所以我们再次短路表达式,执行if块内的代码。