1

値のセットをループし、各値で関数を呼び出すコードがあります。

イエーイイイイイイイイイイイ...

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

興味深いことに、|= を短絡するコンパイラはありません (booleanReturn が既に TRUE であるため、doFunc(i) を実行しないでください)。

これはビットごとの演算子の短絡操作であるため、定義された動作ではないと推測していますが、いくつかの検証を得たいと思っていました。

4

1 に答える 1

3

演算子|=operator |notの合成ですoperator ||。前者は短絡しません。そして、オペレーター||=は存在しません。したがって、あなたの質問に対する答えは否定的です。副作用がある場合は呼び出すfunc 必要があります。副作用がない場合は、as-if ルールに従って、違いがわからない限り、実装は自由に実行できます。

于 2013-08-21T10:17:41.073 に答える