Ich lerne über das Überladen von Operatoren in C ++, und ich sehe das ==
und !=
sind einfach einige spezielle Funktionen, die für benutzerdefinierte Typen angepasst werden können. Mein Anliegen ist jedoch, warum zwei separate Definitionen erforderlich sind. Ich dachte, wenn a == b
es wahr ist, dann a != b
ist es automatisch falsch und umgekehrt, und es gibt keine andere Möglichkeit, weil es per Definition a != b
ist !(a == b)
. Und ich konnte mir keine Situation vorstellen, in der dies nicht stimmte. Aber vielleicht ist meine Vorstellungskraft begrenzt oder ich weiß nichts?
Ich weiß, dass ich eins in Bezug auf das andere definieren kann, aber das ist nicht das, worüber ich frage. Ich frage auch nicht nach der Unterscheidung zwischen dem Vergleichen von Objekten nach Wert oder Identität. Oder ob zwei Objekte gleichzeitig gleich und ungleich sein könnten (dies ist definitiv keine Option! Diese Dinge schließen sich gegenseitig aus). Was ich frage, ist Folgendes:
Gibt es eine Situation, in der es Sinn macht, Fragen zu stellen, ob zwei Objekte gleich sind, aber zu fragen, ob sie nicht gleich sind, macht keinen Sinn? (entweder aus Sicht des Benutzers oder aus Sicht des Implementierers)
Wenn es keine solche Möglichkeit gibt, warum in C ++ werden diese beiden Operatoren dann als zwei unterschiedliche Funktionen definiert?
'undefined' != expression
immer wahr (oder falsch oder undefiniert) ist, unabhängig davon, ob der Ausdruck ausgewertet werden kann. In diesem Fall a!=b
würde das korrekte Ergebnis gemäß Definition zurückgegeben, es !(a==b)
würde jedoch fehlschlagen, wenn b
es nicht ausgewertet werden kann. (Oder nehmen Sie sich viel Zeit, wenn die Bewertung b
teuer ist).
(NaN != NaN) == true