& =保证表现得像假设&& =运算符吗?

时间:2013-06-21 13:15:06

标签: c++ logical-operators

有时我想做

bool success= true;
success &&= dosmthing1();
success &&= dosmthing2();
success &&= dosmthing3();
if (success)

让我们忽略我可以使用例外...... 我的问题是C ++标准保证&=对于我的用例会表现得像不存在&&=吗? ...

编辑:做smthing-s返回bool

4 个答案:

答案 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,dosmthing2dosmthing3如果你不会被调用 使用&&。如果您使用&,则会调用它们。

在这种特殊情况下,为什么不写:

success = dosmthing1()
       && dosmthing2()
       && dosmthing3();

这似乎同样清楚(至少格式化如此),以及 避免使用&&=