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