Выбор ответа Senior Современный C++20/23 обновлено
Deducing this
Вопрос
Какую задачу решает явный объектный параметр C++23 auto&& get(this auto&& self)?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Одна функция вместо перегрузок для &, const& и && объекта self. С явным объектным параметром тип self выводится как у forwarding-ссылки: константная или нет, lvalue или rvalue.
Варианты ответа
- Одна функция вместо перегрузок для
&,const&и&&объектаselfправильный ответ - Позволяет вызывать методы без объекта, как статические функции
- Делает метод виртуальным без ключевого слова
virtualв базе - Запрещает вызов метода у временных объектов, как квалификатор
&
Разбор
С явным объектным параметром тип self выводится как у forwarding-ссылки: константная или нет, lvalue или rvalue. Раньше для геттеров приходилось писать до четырёх перегрузок с квалификаторами. Лямбда с this auto self может вызывать себя, а базовый класс узнаёт тип наследника без CRTP-шаблона.
- Метод по-прежнему требует объекта.
- Виртуальным такой метод быть не может.
- Временные объекты как раз поддерживаются через
&&.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.