【发布时间】:2018-06-12 23:06:52
【问题描述】:
考虑以下
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 受到指责?
【问题讨论】:
-
“我无法在 java 中尝试这个,因为 java 不允许以同样的方式将整数表示为布尔值” - 好吧,只需添加 ` != 0 ` 你可以走了。在
C++中,任何不同于0的整数都会计算为true,因此在Java中模拟这种行为并不是什么大问题 -
@Fureeish 好吧,我不确定 java 是否会以同样的方式评估它,因此我不想得出任何结论试图在 java 上强制示例
-
@HolyBlackCat 啊是的,这是真的。在所有运算符中,任何类型的赋值都具有次低的operator precedence。您可能希望将其添加为答案。
标签: c++ parsing if-statement evaluation