&= 运算符的评估(短路)

  • 本文关键字:短路 评估 运算符 c++
  • 更新时间 :
  • 英文 :


在C++中a &= foo();只是被a = a && foo();取代了吗?

我关心的是foo()的评估。如果a为false,会调用它吗?

&&是否嵌入了短路:您已经意识到了这一点。

&没有任何短路的概念:它是一个需要对两个参数求值的运算符。

非正式地说a &= foo()a = a & foo()的短手。(事实上,它比这更深一点:&=可以原子操作,而长手版本则不会,因为赋值不是原子的。因此,你不能真正考虑编译器进行简单的替换。这里并不严格相关,但值得指出。)。

请注意未注释形式的单个&:混淆的原因。因此不会有捷径。

它们不相同,a &= foo()将等效于a = a & foo(),因此按位和。不涉及短路。

这是位&,而不是逻辑&&

因为它是按位的&,所以将调用该函数,因为执行按位&需要两个操作数。

如果你指的是一个逻辑&&,你需要明确地拼写出来,正如你所写的:

a = a && foo();

在上述情况下,如果afalse,则它应该短路,并且foo()将不会被调用。

最新更新