gpt4 book ai didi

c++ - bool 与非 bool 运算符的行为

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:06:03 27 4
gpt4 key购买 nike

我真正想要的是 ||= 运算符。

old_value = old_value || possible_new_value;
old_value ||= possible_new_value;

第二行是编译器错误(c++ 没有 ||= 运算符)。

那么我的其他选择是什么?

old_value += possible_new_value;
old_value |= possible_new_value;

当我谈到这个主题时,bool 与其他非 bool 运算符的行为如何?

-
-=
&
&=
...

我可以凭经验验证这些,但我最感兴趣的是标准的内容。

最佳答案

根据 4.7(整数转换)第 4 段,“如果目标类型是 bool,请参见 4.12。如果源类型是 bool,则值 false 转换为零,值 true 转换为 1。”在 4.12 中,“算术、枚举、指针或指向成员类型的指针的右值可以转换为 bool 类型的右值。零值、空指针值或空成员指针值被转换为 false;任何其他值都将转换为 true。”

在不允许bool操作数但允许整数操作数的上下文中,bool将被转换为整数类型。当整数结果存储在 bool 变量中时,它将被转换为 bool

因此,您将能够使用 + 和 * 作为 bool 值或和,并且您可以使用 |并且。您不能混合使用它们,因为 (bool1 + bool2) & bool3 将产生 false 如果所有三个变量都是 true。 ((1 + 1) & 1 等于 2 & 1,也就是 0,否则为假。)

请记住 |和||即使在这里也不会完全相同。 |将评估双方,然后评估按位或。 ||将计算第一个操作数,然后只有当它为假时才会计算第二个。

我不打算在这里讨论风格问题,但如果我做了类似的事情,我一定会发表评论,以便人们知道我在做什么以及为什么。

关于c++ - bool 与非 bool 运算符的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1295199/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com