复合赋值运算符是否会短路

时间:2013-08-21 10:14:02

标签: c

我有一些代码循环设置一个值,并用每个值调用一个函数。

像是耶...

for (int i=0; i<limit; i++) {booleanReturn |= doFunc(i);}

好奇的是,没有一个编译器会短路| =右(不执行doFunc(i)因为booleanReturn已经为TRUE了吗?)

我猜测,因为这是一个按位运算符,短路操作不是一个定义的行为,但我希望得到一些验证。

1 个答案:

答案 0 :(得分:3)

运营商|=operator |而非operator ||的复合体。前者不会短路。并且不存在运算符||=。所以你的问题的答案是否定的。 func 如果有副作用,必须调用。如果它没有副作用,那么根据 as-if规则,只要您无法区分,实现就可以自由地执行任何操作。