Выбор ответа Senior Лямбды и функциональные объекты обновлено
Generic-лямбда
Вопрос
Чем является [](auto x) { return x * 2; }?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Объектом с шаблонным operator(): тип x выводится при каждом вызове. С C++14 auto в параметрах лямбды делает operator() шаблоном функции.
Варианты ответа
- Лямбдой, принимающей только
int, как в обычномauto x = 0 - Объектом с шаблонным
operator(): типxвыводится при каждом вызовеправильный ответ - Ошибкой компиляции:
autoнельзя писать в параметрах лямбды - Лямбдой, которая хранит аргумент внутри
std::anyи стирает тип
Разбор
С C++14 auto в параметрах лямбды делает operator() шаблоном функции. Одна и та же лямбда работает с int, double, std::string и инстанцируется для каждого типа отдельно. В C++20 можно явно: []<class T>(T x).
- Тип не фиксирован.
autoв параметрах лямбд разрешён с C++14 (а в параметрах функций с C++20).- Стирания типа нет, всё при компиляции.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.