c++如何求赋值运算符(if语句)
How does c++ evaluate assignment operators (if statement)
考虑以下因素
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
时,编译器会抛出"division by zero"异常,但为什么呢?
现在,如果我将状态括在括号中,我不会得到异常。
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
.
考虑以下因素
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
时,编译器会抛出"division by zero"异常,但为什么呢?
现在,如果我将状态括在括号中,我不会得到异常。
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
.