C の
Operator== および Operator!=
コンパイラーは、デフォルトのコンストラクター、コピーおよび移動コンストラクターを含む必須のクラス メンバーを生成します。および代入演算子と同様に、operator== や などのデフォルトの比較演算子の提供が省略されています。演算子!=.
省略の背後にある理由
他の言語のメンバーごとの比較のデフォルトの動作とは異なり、C では、隠蔽された可能性があるため、デフォルトの比較演算子を明示的に除外します。複雑。この決定は、オブジェクトのセマンティクスに関する制御されていない、または暗黙の仮定が予期せぬ結果を招く可能性があるという Bjarne Stroustrup 氏の懸念から生じています。
開発者への影響
開発者は、operator== と を手動で実装する必要があります。演算子!=。これは、メモリを保持するクラスにとって特に重要です。等しいかどうかを判断するには、メンバー値だけでなくオブジェクト全体を比較する必要があるからです。
コンパイラの制限
デフォルトのコピー コンストラクターを生成すると、コンパイラーはメンバーごとの比較を効率的に実行できなくなります。これは、演算子== と演算子!= では複雑なオブジェクトを比較する必要があり、メンバー値のみから確実に導出することができないためです。
推奨プラクティス
意図しない結果を避けるには、 Operator== および Operator!= による暗黙的なオブジェクトの等価性チェックに依存することは避けてください。クラスの特定の要件を考慮して、これらの演算子を常に明示的に実装してください。
以上がC が `operator==` と `operator!=` を自動的に生成しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。