Синтезированное трехстороннее сравнениеC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Синтезированное трехстороннее сравнение

Сообщение Anonymous »

Может ли кто-нибудь помочь мне понять эту часть ссылки на cpp:
Синтезированное трехстороннее сравнение типа T между glvalues ​​a и b одного и того же типа определяется следующим образом:

Синтезированное трехстороннее сравнение

Если разрешение перегрузки для a
b приводит к полезному результату кандидатом и может быть явно преобразован в T
с помощью static_cast, синтезированное сравнение — static_cast(a b). В противном случае, если любое из следующих условий удовлетворено,
синтезированное сравнение не определено:
  • Разрешение перегрузки для b находит хотя бы один жизнеспособный
    кандидат.
  • не является типом категории сравнения.
  • Разрешение перегрузки для a == b не приводит к созданию пригодного к использованию кандидата.
  • Разрешение перегрузки для < b не приводит к созданию пригодного к использованию кандидата.
Иначе, если T равно std::strong_ordering, синтезированное сравнение

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

a == b ? std::strong_ordering::equal :
a < b  ? std::strong_ordering::less :
std::strong_ordering::greater
Иначе, если T равно std::weak_ordering, синтезированное сравнение будет

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

a == b ? std::weak_ordering::equivalent :
a < b  ? std::weak_ordering::less :
std::weak_ordering::greater
В противном случае (T — std::partial_ordering) синтезированное сравнение будет

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

a == b ? std::partial_ordering::equivalent :
a < b  ? std::partial_ordering::less :
b < a  ? std::partial_ordering::greater :
std::partial_ordering::unordered
Src: https://en.cppreference.com/w/cpp/langu ... isons.html
Я понятия не имею, что именно подразумевается под синтезированным, означает ли это, что компилятор предоставляет трехсторонний оператор сравнения, даже если он не установлен по умолчанию? Кроме того, я не понимаю, как жизнеспособный кандидат на перегрузку одновременно предотвращает и позволяет оператору синтезированного космического корабля.

Подробнее здесь: https://stackoverflow.com/questions/797 ... comparison
Ответить

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

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

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

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

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