为什么逻辑OR运算符不首先评估带括号的右侧条件?

时间:2016-01-14 15:02:47

标签: c++

考虑代码:

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

1 个答案:

答案 0 :(得分:6)

or||相同,后者从左到右执行短路评估。这意味着一旦包含||的表达式的结果已知,评估就会停止。

||也是一个排序点,因此即使在i >= 5)的情况下,行为也是明确定义的。

由于i < 5true,因此不计算另一个表达式;所以i不会增加。