是否保证表现得像假设的&& =运算符?

NoS*_*tAl 10 c++ logical-operators

有时我想做

bool success= true;
success &&= dosmthing1();
success &&= dosmthing2();
success &&= dosmthing3();
if (success)
Run Code Online (Sandbox Code Playgroud)

让我们忽略我可以使用异常...我的问题是它是否由C++标准保证,对我的用例来说&=就像不存在&&=一样?...

编辑:做smthing-s返回布尔

Seb*_*edl 9

这取决于你期望&&=的工作方式.如果你想要x &&= y();等同于x = x && y();,那么不,因为在这个表达式y()中,如果x以false开头,则不会被调用,但是在x &= y();它中.

如果你不希望它是短路的并且你的所有表达式都有类型bool(不是可转换为bool指针,整数或用户定义的对象),它就可以工作.但这有很多限制.


zen*_*hoy 6

不,&是一个按位,&&是布尔和.如果dosmthing*返回1或0以外的值,则结果将不同.

  • @SebastianRedl由于我们不知道dosmthing返回什么类型,&和&&不一样.如果dosmthing1返回一个整数值2,&&将评估为true,而&将将布尔值提升为1并导致为false. (2认同)