例:
我们发现这是一些供应商编写的代码,我们试图找出他们为什么要这样做.
bool tmp = false;
if (somecase)
tmp = true;
if (someOtherCase)
tmp |= true;
Run Code Online (Sandbox Code Playgroud)
Ry-*_*Ry- 69
没有充分的理由.布尔值|= true总是如此true.这是有人试图幻想,或忘记布尔逻辑=)
将其更改为tmp = true;.
pho*_*oog 16
也许其中一个布尔文字曾经是一个变量,他们只是没有想到在更改操作数时更改运算符.显然逻辑是等价的.
更有可能的是,他们认为在第二种情况下,他们希望保留评估第一个"如果"条件的结果.当然,这是错误的推理.
一个更简单的等价声明:
bool tmp = somecase | someOtherCase;
Run Code Online (Sandbox Code Playgroud)
编辑
正如pickypg所指出的那样,这种说法可能令人困惑,因为大多数人并不期望|使用布尔值,许多人不会注意到它,或者不会考虑副作用的含义.明确的最佳方式(如果确实存在副作用)将是minitech的解决方案:只需更改|=为=.
或者,如果someOtherCase表达式没有副作用,请使用Jakub Konecki的解决方案:someCase || someOtherCase.
foo |= true是一个简短的版本foo = foo | true.
实际代码可以重写为
bool tmp = false;
tmp |= someCase;
tmp |= someOtherCase;
Run Code Online (Sandbox Code Playgroud)
甚至更好
someCase || someOtherCase
Run Code Online (Sandbox Code Playgroud)