我有一些代码循环设置一个值,并用每个值调用一个函数。
像是耶...for (int i=0; i<limit; i++) {booleanReturn |= doFunc(i);}
好奇的是,没有一个编译器会短路| =右(不执行doFunc(i)因为booleanReturn已经为TRUE了吗?)
我猜测,因为这是一个按位运算符,短路操作不是一个定义的行为,但我希望得到一些验证。
答案 0 :(得分:3)
运营商|=
是operator |
而非operator ||
的复合体。前者不会短路。并且不存在运算符||=
。所以你的问题的答案是否定的。 func
如果有副作用,必须调用。如果它没有副作用,那么根据 as-if规则,只要您无法区分,实现就可以自由地执行任何操作。