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.