Что выведет код Junior Лямбды и функциональные объекты обновлено
Что выведет: вектор колбэков и IIFE
Вопрос
Что выведет программа (C++20, g++ 14)? Каждый вывод с новой строки, как в консоли.
#include <functional>
#include <iostream>
#include <vector>
int main() {
std::vector<std::function<int()>> fs;
for (int i = 0; i < 3; ++i) fs.push_back([i] { return i * i; });
for (auto& f : fs) std::cout << f();
std::cout << '\n';
const int total = [] {
int s = 0;
for (int i = 1; i <= 4; ++i) s += i;
return s;
}();
std::cout << total << '\n';
std::function<void()> empty;
try {
empty();
} catch (const std::bad_function_call&) {
std::cout << "bad call\n";
}
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: 014, 10, bad call. Каждая лямбда захватила свою копию i: 0, 1, 4.
Что выведет
014
10
bad call
Разбор
Каждая лямбда захватила свою копию i: 0, 1, 4. Немедленно вызванная лямбда считает 1 + 2 + 3 + 4 = 10. Вызов пустого std::function бросает std::bad_function_call.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.