示例代码如下:
bool result;
result = Operation1();
result &= Operation2();
result &= Operation3();
return result;
目的是确保,如果任何函数返回false,则不调用后面的函数。这种语法是正确的还是我需要result = result && Operation2();
?
答案 0 :(得分:7)
如果你的意思是逻辑“和”而不是按位(我怀疑是这样,因为你使用bool
),使用短路:
result = Operation1() && Operation2() && Operation3();
将从左到右评估函数,直到其中一个函数返回false
,然后其余函数将不会被评估。
答案 1 :(得分:2)
代码的短路版本(当你立即返回时不需要结果变量):
if (!Operation1()) return false;
if (!Operation2()) return false;
return Operation3();
或者,如果表达式实际上与此示例中的表达式一样短:
return Operation1() && Operation2() && Operation3();
如果示例代码不具代表性,并且您需要变量用于某些未说明的原因:
bool result = Operation1();
if (result) result = Operation2();
if (result) result = Operation3();
return result;
答案 2 :(得分:1)
&
做了一点点,所以实际上你正在尝试and
所有的答案(如果所有三个操作都成功,则为true,否则为false)。如果Operation2()
失败,则Operation1()
未调用,而Operation3()
失败则未调用Operation2()
,这不会提供短路评估。
答案 3 :(得分:1)
您的方法存在的问题是我不相信true
必须总是最终成为相同的值。例如,如果一个操作符返回2,则返回另外4个,并且您和那些你得到0或false
。即使它们都返回true
,我也不知道标准中有任何特定的保证,它们将具有相同的按位模式。实际上,他们可能会......但是......?
所以我坚持使用&&
运算符,除非您使用积分并确保opX()始终返回true的某个值而另一个返回false,以保证&=
运算符做你期望的事。
此外,使用&
,您不会发生短路。
答案 4 :(得分:1)
我通常认为这种模式写成:
bool result = true;
result = result && Operation1();
result = result && Operation2();
result = result && Operation3();
return result;