Выбор ответа Junior Лямбды и функциональные объекты спрашивают часто обновлено

Во что превращается лямбда

Вопрос

Что создаёт компилятор для лямбда-выражения?

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

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

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

Коротко

Правильный ответ: Объект безымянного класса с operator() и полями для захватов. Лямбда это синтаксический сахар для функционального объекта (closure type).

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

  1. Объект безымянного класса с operator() и полями для захватовправильный ответ
  2. Обычную функцию в глобальной области, захваты становятся параметрами
  3. Указатель на функцию, а захваченные переменные копируются в кучу
  4. Объект std::function с захваченными переменными во внутреннем буфере

Разбор

Лямбда это синтаксический сахар для функционального объекта (closure type). Захваты превращаются в поля, тело в operator().

  • Отдельная функция без состояния получается только как деталь реализации лямбды без захватов, к указателю на которую её можно привести.
  • Никаких аллокаций само создание лямбды не делает.
  • std::function это отдельный тип-обёртка, лямбда им не является.

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

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