我有一些代码循环遍历一组值并使用每个值调用一个函数。
喜欢耶...
for (int i=0; i<limit; i++) {booleanReturn |= doFunc(i);}
只是好奇,没有一个编译器会短路 |= right(不执行 doFunc(i) 因为 booleanReturn 已经是 TRUE?)
我猜测,因为这是一个按位运算符,所以短路操作不是定义的行为,但我希望得到一些验证。
最佳答案
Operator |=
是 operator |
而非 operator ||
的复合。前者不会短路。并且不存在运算符 ||=
。所以你的问题的答案是否定的。如果有副作用,func
必须 被调用。如果它没有副作用,那么根据as-if 规则,只要您看不出区别,实现就可以自由地做任何事情。
关于复合赋值运算符可以短路吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18354712/