Что выведет код 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 ошибок.