1

如果有这样的 if 块

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

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

我知道我可以这样做:

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

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

但我有 18 个 foo 函数,这是我代码的几个部分。有没有什么诀窍可以做到又短又简单?

4

3 回答 3

9

||操作员短路。您可以|改用:

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

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

这是我代码的几个部分

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

于 2012-06-25T21:47:20.740 回答
2

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

好吧,如果您需要调用每个函数,那么您应该调用它们。真的,只需调用它们并存储结果。

但我有 18 个 foo 函数,这是我代码的几个部分。有没有什么诀窍可以做到又短又简单?

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

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

于 2012-06-25T21:52:48.837 回答
1

总结一下函数呢?(仅当函数是独立的并且可以返回正整数或指针时才能正常工作;

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


if(resultSum>0){
 //do things
}
于 2012-06-25T21:57:18.507 回答