私はC ++で演算子オーバーロードについて学んだ、と私はそれを見る==
と!=
、単純にユーザー定義型用にカスタマイズすることができますいくつかの特別な機能です。しかし、私の懸念は、なぜ2つの別個の定義が必要なのかということです。私があればと思ったa == b
事実である場合、a != b
定義によって、あるため、自動的に偽の、およびその逆で、かつ、他の可能性がないa != b
です!(a == b)
。そして、これが真実ではない状況を想像することはできませんでした。しかし、おそらく私の想像力は限られていますか、それとも私は何かについて無知ですか?
もう1つの観点から1つを定義できることは知っていますが、これは私が求めていることではありません。また、値による比較や同一性によるオブジェクトの比較の違いについても質問していません。または、2つのオブジェクトが同時に等しいか等しくないかどうか(これは間違いなくオプションではありません!これらは相互に排他的です)。私が尋ねているのはこれです:
2つのオブジェクトが等しいことについて質問しても意味がないが、等しくないことについて質問しても意味がない状況はありますか?(ユーザーの観点から、または実装者の観点から)
このような可能性がない場合、なぜC ++ではこれら2つの演算子が2つの異なる関数として定義されているのでしょうか。
'undefined' != expression
式を評価できるかどうかに関係なく、常に真(または偽、または未定義)であると定義できます。この場合a!=b
、定義に従って正しい結果が返されますが、評価できない!(a==b)
場合は失敗しb
ます。(または、評価b
に費用がかかる場合は時間がかかります)。
(NaN != NaN) == true