可能重复:
Is there an Non-Short circuited logical “and” in C++?
C++ logical & operator
我的代码类似于:
return ( check1() && check2() && check3() && check4() );
除了返回值(例如打印输出)之外,不同的检查功能还可以执行其他操作。似乎checkX
函数是按顺序运行的,只要一个返回0,其余的就不会运行。这样做是有意义的。什么是最好的方法(在C ++代码中),以确保每个函数运行而不管其他返回值?
答案 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());