Почему перегрузка операторов == и <=> необходима для перегрузки всех операторов сравнения? [дубликат]C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Почему перегрузка операторов == и <=> необходима для перегрузки всех операторов сравнения? [дубликат]

Сообщение Anonymous »

Я просматривал это руководство по перегрузке операторов в C++.
Если я попытаюсь реализовать все операторы сравнения с помощью оператора :

Код: Выделить всё

friend auto operator(const Some_class& lhs, const Some_class& rhs)
{
if (lhs.x < rhs.x) return std::strong_ordering::less;
if (lhs.x > rhs.x) return std::strong_ordering::greater;
else return std::strong_ordering::equal;
}
Оператор == не определен для Some_class. Поэтому мне дополнительно нужно реализовать:

Код: Выделить всё

friend bool operator==(const Some_class& lhs, const Some_class& rhs)
{
if (lhs.x == rhs.x) return true;
return false;
}
В руководстве указано, что это необходимо:

В C++20, если сравнение не реализовано напрямую, компилятор
также попытается использовать кандидатов на перезапись. Благодаря этому, даже если
не используется по умолчанию (что реализовало бы все операторы), нам нужно только
реализовать == и , а все остальные сравнения переписываются в терминахиз этих двух.

Но я не понимаю почему. Почему первого фрагмента кода недостаточно для того, чтобы компилятор определил оператор ==?
Примечание. В этом случае я не могу использовать по умолчанию.

Подробнее здесь: https://stackoverflow.com/questions/785 ... oad-all-co
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»