考虑代码:
int i=2, j=3;
if(i<5 or (++i==j))
cout << "i=" << i;
输出结果为:
i=2
为什么不使用括号在上述条件下有效?为什么输出不是3?
compiler: g++ 4.8.2 on Ubuntu 14.04LTS
答案 0 :(得分:6)
or
与||
相同,后者从左到右执行短路评估。这意味着一旦包含||
的表达式的结果已知,评估就会停止。
(||
也是一个排序点,因此即使在i >= 5
)的情况下,行为也是明确定义的。
由于i < 5
为true
,因此不计算另一个表达式;所以i
不会增加。