2012-04-14 13 views
2

C++の場合、演算子の種類には==!=の演算子がオーバーロードされることがあります。あなたは何も関係なくtrueを返すように両方をオーバーロードすることができるので、!(a==b)(a!=b)は必ずしも同じものに評価する必要はありません。 ¬(a = b)(a ≠ b)が異なる言語がいくつありますか?それは共通のものですか?¬(a = b)と(a≠b)が異なる言語

これは単なる過負荷の問題ではありませんが、プリミティブ型であっても奇妙なコーナーケースがあります。 CおよびC++のNaNは、NaNを含むすべてのものと同等ではありません。 CでNaN!= NaNが成り立つのは事実ですが、他の言語でも同様のケースがあり、¬(a = b)(a ≠ b)が異なる場合がありますか?

+2

あなたがC++でそれを行うことができたからといって、これまでにないことを意味するわけではありません... – corsiKa

+0

私はあなたがRubyでそれを行うことができることを知っています! – Arth

+3

私は==または!=演算子のいずれかをオーバーロードすることができる任意の言語を追加することもできます。それともあまりにもobvですか? – Arth

答えて

1

私は、PythonとRuby can、JavaとPHPではできないことを知っています。 (Javaでは==は、2つのオブジェクトが意味的に同等の値ではなく、メモリ内で同じものかどうかを判断します。PHPでは...決して気にしません)。投機的。

オペレータを過負荷にすることは珍しいことではありません。しかし、!(a==b)(a!=b)で異なる結果が得られることは非常にまれです。

+0

Javaでは、正の値を変更することのみ許可します。「等しい」で、否定された形式をオーバーロードすることはできません。 –

+0

はい、 '=='と '!='を合理的にオーバーライドして、ブール結果(多分SQL条件など)以外のものを生成することはできますが、論理を破壊して '!(a == b) 'は'(a!= b) 'と等しくない。 – 9000

2

Guy L. Steeleが有名

を言った...独自の演算子関数を定義する機能は、X = A + Bのように、単純な文を意味します。アフガニスタンへの電子メールの送信を含むかもしれない。

コルシカは言うとおり、あなたがそれを行うことができるからといって、それは良い考えではありません。

関連する問題