7

整数を返す C 関数がある場合、次のようなステートメントを記述できます。

MyInt &= MyFunc();

...ここでは、ビットごとの AND 代入演算子を使用しています。

問題は、MyInt がゼロに等しい場合でも、MyFunc() が実行されることが保証されているかどうかです。

同様に、ビットごとの OR 代入演算子 (|=) を使用した場合、MyInt がすべて 1 に設定されていても、MyFunc() は常に実行されるでしょうか?

別の言い方をすれば、C ではビットごとの演算子の遅延評価が許可されていますか?

4

2 に答える 2

8

いいえ。ビット単位の演算子はショートサーキットではありません。MyFunc()の値に関係なく実行が保証されますMyInt

于 2009-08-30T15:51:56.327 に答える
1
MyInt &= MyFunc();

次と同等です。

MyInt = MyInt & MyFunc();

言語は、 & 演算子が短絡していないと述べています。ただし、 MyInt がゼロで、関数に副作用がないことが確実な場合、オプティマイザーは関数を呼び出さないコードを生成できます。実行時テストはおそらくそれを悲観的にするので、コンパイラが実際にこれを行うとは思えません。

于 2009-08-30T15:54:54.073 に答える