Выбор ответа Junior Лямбды и функциональные объекты спрашивают часто обновлено
Когда копируется захват по значению
Вопрос
int x = 1; auto f = [x] { return x; }; x = 5; Что вернёт f()?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: 1: копия сделана при создании лямбды. Захват по значению копирует переменную в поле объекта-замыкания в момент создания лямбды.
Варианты ответа
- 5: лямбда читает текущее значение
- Неопределённое поведение
- 1: копия сделана при создании лямбдыправильный ответ
- Ошибка компиляции: x изменён после захвата
Разбор
Захват по значению копирует переменную в поле объекта-замыкания в момент создания лямбды. Последующие изменения x на копию не влияют.
- Текущее значение видел бы захват по ссылке
[&x]. - UB нет: копия живёт внутри лямбды.
- Менять исходную переменную после захвата можно.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.