J'apprends la surcharge des opérateurs en C ++, et je le vois ==
et ce !=
sont simplement des fonctions spéciales qui peuvent être personnalisées pour les types définis par l'utilisateur. Cependant, je me demande pourquoi deux définitions distinctes sont nécessaires? Je pensais que si a == b
est vrai, alors a != b
automatiquement faux, et vice versa, et il n'y a pas d'autre possibilité, parce que, par définition, l' a != b
est !(a == b)
. Et je ne pouvais imaginer aucune situation dans laquelle ce n'était pas vrai. Mais peut-être que mon imagination est limitée ou que j'ignore quelque chose?
Je sais que je peux définir l'un en fonction de l'autre, mais ce n'est pas ce que je demande. Je ne demande pas non plus la distinction entre comparer des objets par valeur ou par identité. Ou si deux objets pourraient être égaux et non égaux en même temps (ce n'est certainement pas une option! Ces choses s'excluent mutuellement). Ce que je demande, c'est ceci:
Y at - il possible dans la situation où poser des questions sur deux objets étant ne égale du sens, mais poser des questions sur les pas être ne correspond pas de sens? (soit du point de vue de l'utilisateur, soit du point de vue de l'implémentateur)
S'il n'y a pas une telle possibilité, alors pourquoi diable C ++ at-il ces deux opérateurs définis comme deux fonctions distinctes?
'undefined' != expression
c'est toujours vrai (ou faux ou non défini), que l'expression puisse être évaluée ou non. Dans ce cas a!=b
, renvoie le résultat correct selon la définition, mais !(a==b)
échoue s'il b
ne peut pas être évalué. (Ou prenez beaucoup de temps si l'évaluation b
coûte cher).
(NaN != NaN) == true