考虑以下
int main() {
int a = 8;
int b = 10;
while (true) {
if (a /= 2 && b < 12) {
b++;
std::cout << b << std::endl;
}
else break;
}
return 0;
}
现在c ++不是我的主要语言,但c ++如何评估这个if语句?
在这种情况下,当b>=12
时,编译器抛出“除以零”异常,但为什么?
现在,如果我将状态包装在括号中,我就不会得到异常。
if( (a /= 2) && (b < 12))
这与c ++如何评估语句有关吗?
如果评估不是问题:
我知道那个
a = (a/2 && b<12)
也不会。
P Λ Q
不适用于P Λ ¬Q
,但P的状态不应受到影响?为什么P
被指责而不是¬Q
?
答案 0 :(得分:3)
if (a /= 2 && b < 12)
与:
相同if (a /= (2 && b < 12))
这样:
2
,它在操作数的上下文中转换为true
&&
。这不会触发短路评估,所以我们继续...... b < 12
,在您谈论的情况下是false
2 && b < 12
评估为false
整体a /= 2 && b < 12
相当于a /= false
,相当于a /= 0
。