Выбор ответа Middle Современный C++20/23 обновлено

Что даёт = default для <=>

Вопрос

Что происходит при объявлении auto operator<=>(const Point&) const = default; в структуре с полями x, y?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Почленное сравнение x, затем y, плюс неявный ==: работают все шесть. Сравнение идёт лексикографически по полям в порядке их объявления.

Варианты ответа

  1. Генерируется только operator<, остальные сравнения пишутся вручную
  2. Почленное сравнение x, затем y, плюс неявный ==: работают все шестьправильный ответ
  3. Нужно отдельно определить <, >, <=, >=, а <=> лишь объявляет их
  4. Сравниваются адреса объектов, как при сравнении указателей на Point

Разбор

Сравнение идёт лексикографически по полям в порядке их объявления. Выражения a < b, a >= b переписываются компилятором через <=>, а == и != через неявно объявленный operator== (он тоже = default).

  • Генерируются все сравнения, не только <.
  • Отдельные операторы писать не нужно.
  • Сравниваются значения полей.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.