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

Deducing this

Вопрос

Какую задачу решает явный объектный параметр C++23 auto&& get(this auto&& self)?

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

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

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

Коротко

Правильный ответ: Одна функция вместо перегрузок для &, const& и && объекта self. С явным объектным параметром тип self выводится как у forwarding-ссылки: константная или нет, lvalue или rvalue.

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

  1. Одна функция вместо перегрузок для &, const& и && объекта selfправильный ответ
  2. Позволяет вызывать методы без объекта, как статические функции
  3. Делает метод виртуальным без ключевого слова virtual в базе
  4. Запрещает вызов метода у временных объектов, как квалификатор &

Разбор

С явным объектным параметром тип self выводится как у forwarding-ссылки: константная или нет, lvalue или rvalue. Раньше для геттеров приходилось писать до четырёх перегрузок с квалификаторами. Лямбда с this auto self может вызывать себя, а базовый класс узнаёт тип наследника без CRTP-шаблона.

  • Метод по-прежнему требует объекта.
  • Виртуальным такой метод быть не может.
  • Временные объекты как раз поддерживаются через &&.

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

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