def*_*ode 6 c++ coding-style standards-compliance
我真正想要的是一个|| =运算符.
old_value = old_value || possible_new_value;
old_value ||= possible_new_value;
Run Code Online (Sandbox Code Playgroud)
第二行是编译器错误(c ++没有|| =运算符).
那么我的其他选择是什么?
old_value += possible_new_value;
old_value |= possible_new_value;
Run Code Online (Sandbox Code Playgroud)
虽然我在讨论这个主题,但bool与其他非布尔运算符的行为如何?
-
-=
&
&=
...
Run Code Online (Sandbox Code Playgroud)
我可以凭经验验证这些,但我最感兴趣的是标准所说的内容.
Dav*_*ley 13
根据4.7(积分转换)第4段,"如果目的地类型是bool,见4.12.如果源类型是bool,则将值false转换为零,并将值true转换为1." 在4.12中,"算术,枚举,指针或指向成员类型的指针的右值可以转换为类型的右值bool.零值,空指针值或空成员指针值转换为false;任何其他值都转换为true".
在bool不允许操作数但是整数操作数的上下文中,bool将转换为整数类型.当整数结果存储在bool变量中时,它将被转换为bool.
因此,您将能够使用+和*作为布尔值或和,并且您可以使用| 并且.你不能把它们混合起来,因为(bool1 + bool2)和bool3会产生false所有三个变量true.((1 + 1)&1为2&1,为0或假.)
请记住| 和|| 即使在这里,也不要完全相同.| 将评估双方,然后评估按位或.|| 将评估第一个操作数,然后只有当它为false时才会评估第二个操作数.
我不会在这里讨论风格问题,但如果我做了类似的事情,我一定会评论它,以便人们知道我在做什么以及为什么.