考虑以下
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
?
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
。本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句