c – 使用非布尔运算符的bool的行为

前端之家收集整理的这篇文章主要介绍了c – 使用非布尔运算符的bool的行为前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我真正想要的是一个|| =运算符.
old_value = old_value || possible_new_value;
old_value ||= possible_new_value;

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

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

old_value += possible_new_value;
old_value |= possible_new_value;

虽然我在讨论这个主题,但bool与其他非布尔运算符的行为如何?

-
-=
&
&=
...

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

解决方法

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

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

因此,您将能够使用和*作为布尔值或和,并且您可以使用|和&也.你不能把它们混合起来,如(bool1 bool2)&如果所有三个变量都为真,bool3将产生false. ((1 1)& 1是2& 1,为0或假.)

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

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

猜你在找的C&C++相关文章