我今天遇到了一些检查许多错误条件的代码。从头到尾都使用了一个布尔值,但不是每次都用 a 重新分配它,而是用 a 重新分配它=
,&=
结果是布尔值的前一个值和新值进行了位明智的与运算。代码看起来像这样:
bool result = FirstCheck();
Assert(result);
result &= SecondCheck();
Assert(result);
...
现在我很好奇为什么有人会这样做?这在逻辑上等同于重新分配布尔值,如下面的可能分支所示:
- FirstCheck 失败(返回 false)并且程序在断言上失败并且永远不会进入 SecondCheck
- FirstCheck 通过(返回 true),程序进入 SecondCheck。如果 SecondCheck 返回 true,则结果为 true,因为 true&true = true。如果 SecondCheck 返回 false,则结果为 false,因为 true&false = false。
由于没有逻辑上的差异,是否还有其他原因&=
可能更可取?还是更有可能是一些从未改变过的旧代码的遗物?
编辑:为了澄清,断言始终是活动代码。实际上,我在调查错误时偶然发现了这段代码,因为断言失败了。