评估(短路)和; =运算符

时间:2014-04-25 07:26:50

标签: c++

a &= foo();在C ++中只是被a = a && foo();取代,还是有更多内容?

我关心的是对foo()的评价。如果a为假,它会被调用吗?

3 个答案:

答案 0 :(得分:3)

&& 确实嵌入了短线:您已经意识到这一点。

& 没有有任何短暂的概念:它是一个需要评估两个参数的运营商。

非正式地说a &= foo()a = a & foo()的缩写。 (实际上它比那个更深一点:&=可以原子操作,而长版本不会因为赋值不是原子的。所以你不能真正考虑编译器做一个简单的替换。不严格相关,但值得指出。)。

请注意未缩写形式的单&:混淆的原因。因此没有捷径。

答案 1 :(得分:2)

他们不一样,a &= foo()等同于a = a & foo(),所以按位和。没有涉及短路。

答案 2 :(得分:0)

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

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

如果您的意思是逻辑&&,则需要明确拼写出来,如您所写:

a = a && foo();

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