实施例的代码如下:我可以使用&=来阻止函数执行吗?
bool result;
result = Operation1();
result &= Operation2();
result &= Operation3();
return result;
意图是确保如果任何功能返回false,下面的功能不被调用。这个语法是否正确或者我需要做result = result && Operation2();
?
实施例的代码如下:我可以使用&=来阻止函数执行吗?
bool result;
result = Operation1();
result &= Operation2();
result &= Operation3();
return result;
意图是确保如果任何功能返回false,下面的功能不被调用。这个语法是否正确或者我需要做result = result && Operation2();
?
如果你的意思是一个合乎逻辑的“和”,而不是按位(我怀疑是这样,因为你使用的是bool
),使用短路:
result = Operation1() && Operation2() && Operation3();
的功能将被评估左到右直到他们中的一个返回false
,然后其余的将不被评估。
&
做一个按位,所以实际上你试图and
所有的答案在一起(如果所有三个操作都成功,则返回true,否则返回false)。这不提供短路评估,如果Operation1()
发生故障,则不调用Operation2()
,如果Operation2()
发生故障,则不调用Operation3()
。
你的方法的问题是,我不相信true
必须始终最终成为相同的价值。如果一个操作返回2,例如另一个返回4,那么你就可以得到0或false
。即使他们都返回true
我不知道标准中有任何特定的保证,他们会有相同的按位模式。实际上,他们可能会......但......?
所以我会坚持使用&&
运算符,除非您使用积分并确保opX()始终返回某个值为true而另一个为false,这样操作员才能保证按照您的期望进行操作。
此外,与&
你不会短路。
你的代码的短路版本(无需为结果变量,你立即返回吧):
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;
我一般看到这种模式写成:
bool result = true;
result = result && Operation1();
result = result && Operation2();
result = result && Operation3();
return result;
你的意思是合乎逻辑的“和”,而不是按位? – 2010-11-29 18:46:04
是的,我喜欢。最后加入了额外的`&`。 – djeidot 2010-11-29 18:50:15
既然没有`&& =`操作符,现在的问题是你已经意识到`&=`是按位的,是吗? – 2010-11-29 19:01:55