Выбор ответа Senior Лямбды и функциональные объекты обновлено

Generic-лямбда

Вопрос

Чем является [](auto x) { return x * 2; }?

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

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

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

Коротко

Правильный ответ: Объектом с шаблонным operator(): тип x выводится при каждом вызове. С C++14 auto в параметрах лямбды делает operator() шаблоном функции.

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

  1. Лямбдой, принимающей только int, как в обычном auto x = 0
  2. Объектом с шаблонным operator(): тип x выводится при каждом вызовеправильный ответ
  3. Ошибкой компиляции: auto нельзя писать в параметрах лямбды
  4. Лямбдой, которая хранит аргумент внутри std::any и стирает тип

Разбор

С C++14 auto в параметрах лямбды делает operator() шаблоном функции. Одна и та же лямбда работает с int, double, std::string и инстанцируется для каждого типа отдельно. В C++20 можно явно: []<class T>(T x).

  • Тип не фиксирован.
  • auto в параметрах лямбд разрешён с C++14 (а в параметрах функций с C++20).
  • Стирания типа нет, всё при компиляции.

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

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