Что выведет код Middle Лямбды и функциональные объекты спрашивают часто обновлено
Что выведет: захват по значению, по ссылке и mutable
Вопрос
Что выведет программа (C++20, g++ 14)? Каждый вывод с новой строки, как в консоли.
#include <iostream>
int main() {
int x = 1;
auto byVal = [x] { return x; };
auto byRef = [&x] { return x; };
x = 2;
std::cout << byVal() << byRef() << '\n';
int c = 0;
auto counter = [c]() mutable { return ++c; };
counter();
counter();
std::cout << counter() << ' ' << c << '\n';
auto copy = counter;
std::cout << copy() << counter() << '\n';
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: 12, 3 0, 44. byVal хранит копию 1, byRef видит текущее значение 2. counter меняет свою копию c: третий вызов вернёт 3, а внешняя c осталась 0. copy это копия объекта-замыкания вместе с состоянием 3: оба следующих вызова вернут 4, у каждого своя копия.
Что выведет
12
3 0
44
Разбор
byVal хранит копию 1, byRef видит текущее значение 2. counter меняет свою копию c: третий вызов вернёт 3, а внешняя c осталась 0. copy это копия объекта-замыкания вместе с состоянием 3: оба следующих вызова вернут 4, у каждого своя копия.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.