C++ では、ユーザー型の==
and!=
演算子をオーバーロードできますが、言語はユーザーがそれを行う方法を気にしません。true
両方をオーバーロードして何があっても返すことができるので、必ずしも同じものに評価する必要は!(a==b)
ありません。とが異なる(a!=b)
状況にある言語は他にいくつありますか? それは一般的なことですか?¬(a = b)
(a ≠ b)
これは単なるオーバーロードの問題ではなく、プリミティブ型であっても奇妙なコーナー ケースです。C および C++ の NaN は、NaN を含め、何とも等しくありません。確かに C では NaN != NaN ですが、他の言語でも同様のケースで¬(a = b)
と(a ≠ b)
が異なる場合があるのではないでしょうか?