条件是否使用OR检查所有条件

时间:2012-06-25 21:46:07

标签: c++ conditional conditional-statements shortest-path

if if like block

if(foo() || foo2() || foo3())
{
 //do some things
}

我只需要一个foo函数来返回true来执行该代码。 但我必须打电话给所有人。 当第一个foo返回true时问题开始。这样就不会调用其余的foos(foo2和foo3)了。

我知道我可以这样做:

bool foo1 = foo1();
bool foo2 = foo2();
bool foo3 = foo3();

if(foo1 || foo2 || foo3) {}

但我有18个foo函数,这是我代码的一小部分。 有什么技巧可以简单易行吗?

3 个答案:

答案 0 :(得分:9)

||运营商正在短路。您可以改为使用|

if (foo1() | foo2() | foo3()) {}

但是你也应该考虑创建一个函数指针数组并在循环中调用它们。

  

这是我的代码的一小部分

您应该重构代码,以便可以重复使用它,而不是在许多地方复制和粘贴相同的代码。

答案 1 :(得分:2)

  

我只需要一个foo函数来返回true来执行该代码。但我必须打电话给所有人。当第一个foo返回true时问题开始。这样就不会调用其余的foos(foo2和foo3)了。

如果您需要调用每个函数,那么您应该调用它们。真的,只需打电话给他们并存储结果。

  

但我有18个foo函数,这是我代码的一小部分。有什么技巧可以简单易行吗?

为什么在一个if语句中有18个函数可以调用和测试?必须有更好的方法来解决问题。因此,每个功能都有副作用,你需要这些功能发生,很棒,但这听起来像是一个问题。

我不知道你要解决什么问题,我也不知道每个功能的作用,但我很难相信你当前的设置已接近最佳状态。

答案 2 :(得分:1)

如何对功能进行总结? (仅当函数是独立的并且可以返回正int或指针时才有效;

int resultSum = func1() + func2() + func3();


if(resultSum>0){
 //do things
}