C での短絡評価: 注意事項
Java では、短絡評価により、論理演算子の正しいオペランドが次のとおりであることが保証されます。左のオペランドが true と評価された場合にのみ実行されます。この動作により、不必要な計算を回避して効率的なコード実行が可能になります。
次に、C での同様のシナリオを考えてみましょう。
if (a != 0 && a->fun());
このコードは Java で必要な動作をエミュレートしますが、次の点に注意することが重要です。ユーザー定義型の短絡評価は C では保証されていません。これは、a が null の場合でも a->fun() 呼び出しが実行され、未定義の動作が発生する可能性があることを意味します。
この矛盾の背後にある理由は、論理演算子 && および || のオーバーロードされた性質にあります。 C で。これらの演算子をユーザー定義型に適用すると、プログラマがカスタマイズでき、短絡評価のデフォルト動作をオーバーライドできる可能性があります。
したがって、移植性を確保し、予測できない結果を避けるために、使用しないことを強くお勧めします。 && と || をオーバーロードします。カスタムタイプの演算子。ただし、int や bool などの組み込み型の場合は、短絡評価が保証されているため、Java と同じようにこの強力な最適化手法を C で利用できます。
以上がユーザー定義型の短絡評価は C で保証されていますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。