Я изучаю перегрузку оператора на С++, и я вижу, что ==
и !=
- это просто некоторые специальные функции, которые могут быть настроены для пользовательских типов. Однако моя забота состоит в том, почему нужны два отдельных определения? Я думал, что если a == b
истинно, то a != b
автоматически ошибочно, и наоборот, и нет другой возможности, потому что по определению a != b
есть !(a == b)
. И я не мог представить ни одной ситуации, в которой это было бы неверно. Но, может быть, мое воображение ограничено или я ничего не знаю о чем-то?
Я знаю, что я могу определить один в терминах другого, но это не то, о чем я прошу. Я также не спрашиваю о различии между сопоставлением объектов по стоимости или идентификацией. Или два объекта могут быть равными и не равными одновременно (это определенно не вариант! Эти вещи взаимоисключающие). Я спрашиваю об этом:
Есть ли какая-либо ситуация, при которой вопрос о равных двух объектах имеет смысл, но вопрос о том, что они не равны, не имеет смысла? (либо с точки зрения пользователя, либо с точки зрения реализатора).
Если такой возможности нет, то почему на Земле С++ эти два оператора определяются как две различные функции?