2

C++ では、ユーザー型の==and!=演算子をオーバーロードできますが、言語はユーザーがそれを行う方法を気にしません。true両方をオーバーロードして何があっても返すことができるので、必ずしも同じものに評価する必要は!(a==b)ありません。とが異なる(a!=b)状況にある言語は他にいくつありますか? それは一般的なことですか?¬(a = b)(a ≠ b)

これは単なるオーバーロードの問題ではなく、プリミティブ型であっても奇妙なコーナー ケースです。C および C++ の NaN は、NaN を含め、何とも等しくありません。確かに C では NaN != NaN ですが、他の言語でも同様のケースで¬(a = b)(a ≠ b)が異なる場合があるのではないでしょうか?

4

2 に答える 2

2

ガイ・L・スティールの有名な言葉

...独自の演算子関数を定義できるということは、 x=a+b; のような単純なステートメントを意味します。内部ループでは、アフガニスタンへの電子メールの送信が含まれる場合があります。

そして、コルシカが言うように、それができるからといって、それが良い考えであるとは限りません.

于 2012-04-15T03:12:09.677 に答える
1

Python と Ruby はできますが、Java と PHP はできません。(Java では==、意味的に同等の値だけでなく、2 つのオブジェクトがメモリ内で同じものであるかどうかを判断します。PHP では...気にしないでください。) また、Lisp と JS は可能であり、C は不可能であると想像しますが、それはもう少し推測的です。 .

演算子をオーバーロードできることは珍しいことではありません。!(a==b)ただし、 と(a!=b)が異なる結果になることは非常にまれです。

于 2012-04-14T19:36:56.557 に答える