c。内部短路评估

时间:2015-09-05 09:02:28

标签: c logical-operators short-circuiting

我知道Java和C / C ++有短路评估,即在if (a && b)b永远不会评估a是否为真。

但是,如果我的表达式如if ( (a && b) OP c )(其中OP是一个任意逻辑运算符),b会评估a = false吗?感谢。

3 个答案:

答案 0 :(得分:3)

C标准说 -

  

6.5.13逻辑AND运算符

     
      
  1. &&运营商保证从左到右的评估......   。如果第一个操作数比较等于0,则不计算第二个操作数。
  2.   

因此,如果不评估a==flase b

答案 1 :(得分:2)

如果 a = falsea && b == 0,无论b 的价值如何,您都将永远拥有。为什么评估后的操作会改变呢?

a b  |  a && b 
0 0  |   0
0 1  |   0

答案 2 :(得分:2)

如果a=false则不会检查b的条件,那么(a && b) 总是错误 并且下一个条件取决于所使用的OP,如果它是&&则不会被评估。如果是||,则会对其进行评估。

所以

((a && b) OP c)

此处如果a=false (a && b)始终为假。

相关问题