Estoy aprendiendo sobre la sobrecarga de operadores en C ++, y veo eso ==
y !=
son simplemente algunas funciones especiales que se pueden personalizar para los tipos definidos por el usuario. Sin embargo, mi preocupación es, ¿por qué se necesitan dos definiciones separadas ? Pensé que si a == b
es verdad, entonces a != b
es automáticamente falso, y viceversa, y no hay otra posibilidad, porque, por definición, lo a != b
es !(a == b)
. Y no podía imaginar ninguna situación en la que esto no fuera cierto. ¿Pero quizás mi imaginación es limitada o soy ignorante de algo?
Sé que puedo definir uno en términos del otro, pero esto no es lo que estoy preguntando. Tampoco estoy preguntando sobre la distinción entre comparar objetos por valor o por identidad. O si dos objetos podrían ser iguales y no iguales al mismo tiempo (¡esto definitivamente no es una opción! Estas cosas son mutuamente excluyentes). Lo que pregunto es esto:
¿Hay alguna situación posible en la que hacer preguntas acerca de que dos objetos sean iguales no tiene sentido, pero preguntar si no son iguales no tiene sentido? (ya sea desde la perspectiva del usuario o desde la perspectiva del implementador)
Si no existe tal posibilidad, ¿por qué en la Tierra C ++ tiene estos dos operadores definidos como dos funciones distintas?
'undefined' != expression
siempre es verdadero (o falso o indefinido), independientemente de si la expresión puede evaluarse. En este caso a!=b
, devolvería el resultado correcto según la definición, pero !(a==b)
fallaría si b
no se puede evaluar. (O tome mucho tiempo si la evaluación b
es costosa).
(NaN != NaN) == true