我正在编写一些C ++代码,我想调用两个函数(checkXDirty
和checkYDirty
),如果返回true
,则返回true
。我需要评估两者,即使一个人返回true
,所以我的第一个想法是使用
return checkXDirty() | checkYDirty();
这看起来有点奇怪(可能是脏的)。这总是在C ++中产生正确的结果吗? C,_Bool
类型怎么样? (这段代码最终可能适用于任何一种语言,我不希望在移植代码时出现令人不快的意外情况。)
答案 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;