代码之家  ›  专栏  ›  技术社区  ›  JohEker

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

  •  -2
  • JohEker  · 技术社区  · 6 年前

    考虑以下内容

    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 回复  |  直到 6 年前
        1
  •  3
  •   Arthur Tacca wim    6 年前
    if (a /= 2 && b < 12)
    

    与以下内容相同:

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

    所以:

    • 2 被计算,转换为 true 在操作数的上下文中 && .这不会触发短路评估,因此我们继续……
    • b < 12 你说的是 false
    • 所以 2 && b < 12 计算结果为 错误 总体的
    • a /= 2 && b < 12 因此相当于 a /= false 这里,相当于 a /= 0 .