我知道Java和C / C ++有短路评估,即在if (a && b)
,b
永远不会评估a
是否为真。
但是,如果我的表达式如if ( (a && b) OP c )
(其中OP
是一个任意逻辑运算符),b
会评估a = false
吗?感谢。
答案 0 :(得分:3)
C标准说 -
6.5.13逻辑AND运算符
- &&运营商保证从左到右的评估...... 。如果第一个操作数比较等于0,则不计算第二个操作数。
醇>
因此,如果不评估a==flase
b
,
答案 1 :(得分:2)
如果 a = false
:a && 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)
始终为假。