(bool | bool)安全吗?

时间:2013-02-21 00:28:34

标签: c++ c

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

return checkXDirty() | checkYDirty();

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

2 个答案:

答案 0 :(得分:46)

  

我需要评估两者,即使一个人返回true,所以我的第一个想法就是使用......

然后停止尝试变得棘手并使代码尽可能少地适合。只需调用这两个函数,并明确表示需要调用它们:

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

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

答案 1 :(得分:8)

只要值不是不确定的,使用按位运算符在技术上是可以的。但是,由于这是一个充满通用编码习惯的问题,我只想编写一些内联OR函数,让编译器进行优化。编译器擅长优化,所以,让它。

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

或许,如果你是大胆的,敢于接受向那些维护它的人解释代码的挑战,

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

或者现在我读了@EdS'的答案,将值存储在变量中也许同样好,但是然后添加const,如下所示:

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