-2

我总是想知道一些事情,在其他地方找不到答案。如果我有这段代码:

if ((cond1) &&(cond2) && (cond 3) && (cond 4))
 {
       // do something
 }

假设第一个条件为假,那么我的程序也会验证其他条件,还是跳过验证它们?

但如果我有

if ((cond1) ||(cond2) || (cond 3) || (cond 4))
 {
       // do something
 }

并且 cond 1 为真,我的程序会在 if 部分立即运行还是继续验证其他条件?

4

2 回答 2

4

引用C11标准,第 §6.5.13 章,逻辑与运算符强调我的

与按位二元&运算符不同,运算&&符保证从左到右的求值;如果计算第二个操作数,则在第一个和第二个操作数的计算之间存在一个序列点。如果第一个操作数比较等于 0,则不计算第二个操作数。

因此,如果第一个条件(LHS 操作数)评估为false&& ,则不评估后面的条件,即 RHS 操作数。

同样(具有讽刺意味的是),对于逻辑“或”运算符,

与按位运算|符不同,运算||符保证从左到右的求值;如果计算第二个操作数,则在第一个和第二个操作数的计算之间存在一个序列点。如果第一个操作数比较不等于 0,则不计算第二个操作数。

于 2016-12-22T14:55:08.843 回答
2

在 C 中 && 和 || “排序电路”,意思是如果左​​操作数的评估足以确定结果,则不评估右操作数。

于 2016-12-22T14:55:05.110 回答