C での短絡評価 : Java と同じくらい信頼性がありますか?
Java では、短絡評価は重要な機能です。条件式を効率的に実行できます。 && 演算子を利用することで、Java は左側のオペランドが false に評価される場合、右側のオペランドは評価されないことを保証し、パフォーマンスを最適化します。
ただし、C では、カスタム型の短絡評価の信頼性は次のとおりです。確実性が低い。整数やポインターなどの組み込み型は保証された短絡動作を享受できますが、カスタム型を定義し、&& と || をオーバーロードします。演算子はこの動作を危険にさらす可能性があります。
これを説明するために、次の C の例を考えてみましょう。
class MyClass { public: MyClass() : value(0) {} int value; bool operator&&(MyClass& other) { cout << "Custom && operator called" << endl; return value && other.value; } }; int main() { MyClass a; if (a == 0 && a.fun()) { cout << "Execution reached the right-hand side of the condition" << endl; } return 0; }
この例では、ユーザー定義クラス MyClass の && 演算子をオーバーロードしました。 if ステートメントを実行すると、左側のオペランドが false (a == 0 が false) と評価されても、右側のオペランドが引き続き評価されますが、これは予期せず、望ましくない可能性があります。
したがって、 C では組み込み型のショートサーキット評価が保証されているため、カスタム型を定義したり論理演算子をオーバーロードしたりする場合には注意が必要です。これらの演算子をオーバーロードすると、予期しない動作が発生し、短絡評価の信頼性が損なわれる可能性があります。
以上がC での短絡評価: カスタム型に対する信頼性は Java と同じくらいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。