有时我想做
bool success= true;
success &&= dosmthing1();
success &&= dosmthing2();
success &&= dosmthing3();
if (success)
让我们忽略我可以使用例外......
我的问题是C ++标准保证&=
对于我的用例会表现得像不存在&&=
吗?
...
编辑:做smthing-s返回bool
答案 0 :(得分:9)
这取决于您期望&&=
的工作方式。如果您希望x &&= y();
等同于x = x && y();
,那么请注意,因为如果y()
以x
开头为假,但在x &= y();
中,则不会调用bool
它会。
如果您不希望它是短路的,并且您的所有表达式都有bool
类型(不能转换为{{1}},如指针,整数或用户定义的对象),有用。但这有很多限制。
答案 1 :(得分:6)
不,&是一个按位,和&&是布尔和。如果dosmthing *返回1或0以外的值,则结果将不同。
答案 2 :(得分:4)
没有;它不是短路的。
bool x = false;
x &= (cout << "You shouldn't see me!");
答案 3 :(得分:4)
他们完全不同。在这种情况下,短
&&
的电路似乎很重要:如果dosmthing1()
返回
false,dosmthing2
和dosmthing3
如果你不会被调用
使用&&
。如果您使用&
,则会调用它们。
在这种特殊情况下,为什么不写:
success = dosmthing1()
&& dosmthing2()
&& dosmthing3();
这似乎同样清楚(至少格式化如此),以及
避免使用&&=
。