c ++如何评估赋值运算符(if语句)

时间:2018-06-12 23:06:53

标签: c++ parsing if-statement evaluation

考虑以下

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

1 个答案:

答案 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