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

约翰·埃克

考虑以下

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

阿瑟·塔卡
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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章