在C ++中完成逻辑AND链中的所有函数调用

时间:2012-10-24 20:32:55

标签: c++ logical-operators

  

可能重复:
  Is there an Non-Short circuited logical “and” in C++?
  C++ logical & operator

我的代码类似于:

return ( check1() && check2() && check3() && check4() );

除了返回值(例如打印输出)之外,不同的检查功能还可以执行其他操作。似乎checkX函数是按顺序运行的,只要一个返回0,其余的就不会运行。这样做是有意义的。什么是最好的方法(在C ++代码中),以确保每个函数运行而不管其他返回值?

5 个答案:

答案 0 :(得分:6)

bool ret1 = check1();
bool ret2 = check2();
bool ret2 = check3();
bool ret4 = check4();

return (ret1 && ret2 && ret3 && ret4);

答案 1 :(得分:2)

使用逐位和运算符

return ( check1() & check2() & check3() & check4() );

这将在返回前进行​​每次通话。


节点:这是一个黑客,不推荐。

答案 2 :(得分:1)

一个解决方案可能是捕获bool变量中的每个函数的结果以及所有4个变量上的perfoeming chexk。

bool x1 = check1();
bool x2 = check2();
bool x3 = check3();
bool x4 = check4();
return (x1 && x2 && x3 && x3);

bool x1 = check1(); bool x2 = check2(); bool x3 = check3(); bool x4 = check4(); return (x1 && x2 && x3 && x3);

答案 3 :(得分:1)

bool res = check1();
res &= check2();
res &= check3();
res &= check4();
return res;

答案 4 :(得分:0)

如果您不关心函数运行的顺序,可以使用:

return (check1() + check2() + check3() + check4()) == 4;

另一种可能性是使用指向函数的指针,因此您可以在循环中调用它们:

typedef bool (*f)();

f checks[] = {check1, check2, check3, check4};

bool ret = true;
for (int i=0; i<4; i++)
     ret &= checks[i]();

return ret;

这对于处理4个函数没什么帮助,但如果4只是一个演示而且确实存在更多(或者有很大的扩展可能性),这使得它相对容易处理在必要时使用大量功能。

如果你更关心简洁而不是清晰,你可以这样做:

bool ret = check1();

return (ret &= check2()), (ret &= check3()), (ret & check4());