Is (bool | bool) safe?

Is (bool | bool) safe?

本文关键字:bool safe Is      更新时间:2023-10-16

我正在写一些C++代码,我想调用两个函数(checkXDirtycheckYDirty),如果其中一个返回true,则返回true。我需要评估两者,即使其中一个返回true,所以我的第一个想法是使用

return checkXDirty() | checkYDirty();

这看起来有点奇怪(也许是脏的)。这在C++中总是产生正确的结果吗?使用_Bool类型的C呢?(这段代码最终可能会适用于任何一种语言,我不希望在移植代码时出现不愉快的意外)。

我需要评估两者,即使其中一个返回true,所以我的第一个想法是使用。。。

然后,不要再刁钻了,尽量减少代码的行数。只需调用这两个函数,并明确需要调用它们:

const bool x_dirty = is_x_dirty();
const bool y_dirty = is_y_dirty();
return x_dirty || y_dirty;

接下来,重命名或拆分您的函数,因为is_xxx_dirty确实不应该产生副作用。因此,您的代码更难维护

只要值不是不确定的,从技术上讲,使用逐位运算符是可以的。然而,由于作为通用编码习惯,这充满了问题,因此我只会编写一个小的内联OR函数,并让编译器进行优化。编译器擅长优化,所以,顺其自然吧

return eitherOrBothTrue( checkXDirty(), checkYDirty() );

或者,如果你很大胆,敢于接受向维护人员解释代码的挑战,

return !bothFalse( checkXDirty(), checkYDirty() );

或者现在我读到了@EdS的答案,也许只将值存储在变量中同样好,但要添加const,就像这样:

bool const xIsDirty = checkXDirty();
bool const yIsDirty = checkYDirty();
return xIsDirty || yIsDirty;