Что выведет код Middle Лямбды и функциональные объекты обновлено
Что выведет: generic-лямбда и init-capture
Вопрос
Что выведет программа (C++20, g++ 14)? Каждый вывод с новой строки, как в консоли.
#include <iostream>
#include <memory>
#include <string>
int main() {
auto add = [](auto a, auto b) { return a + b; };
std::cout << add(1, 2) << ' ' << add(std::string("a"), "b") << ' ' << add(1.5, 1) << '\n';
auto p = std::make_unique<int>(7);
auto f = [q = std::move(p)] { return *q; };
std::cout << f() << ' ' << (p == nullptr) << '\n';
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: 3 ab 2.5, 7 1. Generic-лямбда инстанцируется для каждой пары типов: int + int = 3, std::string + const char даёт строку ab, double + int = 2.5.
Что выведет
3 ab 2.5
7 1
Разбор
Generic-лямбда инстанцируется для каждой пары типов: int + int = 3, std::string + const char* даёт строку ab, double + int = 2.5. Инициализирующий захват переместил unique_ptr внутрь лямбды: она возвращает 7, а исходный p пуст.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.