是a &= foo();
在C ++中只是被a = a && foo();
取代,还是有更多内容?
我关心的是对foo()
的评价。如果a
为假,它会被调用吗?
答案 0 :(得分:3)
&&
确实嵌入了短线:您已经意识到这一点。
&
没有有任何短暂的概念:它是一个需要评估两个参数的运营商。
非正式地说a &= foo()
是a = a & foo()
的缩写。 (实际上它比那个更深一点:&=
可以原子操作,而长版本不会因为赋值不是原子的。所以你不能真正考虑编译器做一个简单的替换。不严格相关,但值得指出。)。
请注意未缩写形式的单&
:混淆的原因。因此没有捷径。
答案 1 :(得分:2)
他们不一样,a &= foo()
等同于a = a & foo()
,所以按位和。没有涉及短路。
答案 2 :(得分:0)
这是bitwise &
,而不是逻辑&&
。
因为它是按位&
,所以将调用该函数,因为需要两个操作数来执行按位&
。
如果您的意思是逻辑&&
,则需要明确拼写出来,如您所写:
a = a && foo();
在上述情况下,如果a
为false
,则应该短路并且不会调用foo()
。