私は C++ での演算子のオーバーロードについて学んでい==
ます!=
。これは、ユーザー定義型用にカスタマイズできる特別な関数にすぎません。しかし、私の懸念は、なぜ2 つの別個の定義が必要なのかということです。a == b
が true の場合、 thena != b
は自動的に false になり、その逆も成り立つと考えました。定義上、a != b
はであるため、他の可能性はありません!(a == b)
。そして、これが真実でない状況は想像できませんでした。しかし、私の想像力は限られているのでしょうか、それとも私は何かを知らないのでしょうか?
一方を他方の観点から定義できることは知っていますが、これは私が求めていることではありません。また、オブジェクトを値または ID で比較することの違いについても質問していません。または、2 つのオブジェクトが同時に等しくなる可能性と等しくない可能性があるかどうか (これは絶対にオプションではありません! これらは相互に排他的です)。私が尋ねているのはこれです:
2 つのオブジェクトが等しいことについて質問するのは理にかなっていますが、それらが等しくないことについて質問することは意味がないという状況はありますか? (ユーザーの観点から、または実装者の観点から)
そのような可能性がない場合、一体なぜ C++ でこれら 2 つの演算子が 2 つの異なる関数として定義されているのでしょうか?