11

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

return checkXDirty() | checkYDirty();

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

4

2 回答 2

45

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

然后停止试图变得棘手,让你的代码尽可能少的行。只需调用这两个函数并明确需要调用它们:

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

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

于 2013-02-21T00:34:07.983 回答
8

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

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

或者,如果你大胆并敢于接受挑战,向将要维护它的人解释代码,

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

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

bool const xIsDirty = checkXDirty();
bool const yIsDirty = checkYDirty();
return xIsDirty || yIsDirty;
于 2013-02-21T00:34:27.083 回答