C++ c++;计算赋值运算符(if语句)

C++ c++;计算赋值运算符(if语句),c++,parsing,if-statement,evaluation,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++如何评估语句有

考虑以下几点

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++如何评估语句有关吗? 如果评估不是问题:

我知道这一点

a = (a/2 && b<12)
a=(a/2&&b
if(a/=2&&b<12)
同:

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

  • “我无法在java中尝试此操作,因为java不允许以相同的方式将整数表示为布尔值”在
    C++
    中,任何不同于
    0
    的整数的计算结果都是
    true
    ,因此在
    Java
    @中模拟这种行为并不是什么大问题。我不确定Java是否会以同样的方式对其进行评估,因此我不想得出任何结论ns试图把这个例子强加于java@HolyBlackCat啊,是的,这是真的。任何类型的赋值都有下一个最低的运算符。你可能想添加它作为答案。
    if (a /= 2 && b < 12)
    
    if (a /= (2 && b < 12))