Mediumlambdac++14
Что такое обобщённые лямбды (generic lambdas) и почему они появились только в C++14?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
В C++11 параметры лямбды требовали конкретные типы: [](int x, int y) {...}. C++14 добавил auto в параметрах: [](auto x, auto y) {...}. Компилятор превращает это в шаблонный operator().
// C++11: только конкретные типы
auto add = [](int x, int y) { return x + y; };
// C++14: generic lambda — работает с любыми типами
auto add = [](auto x, auto y) { return x + y; };
add(1, 2); // int
add(std::string("a"), std::string("b")); // string
// C++20: явные шаблонные параметры
auto f = []<typename T>(std::vector<T> const& v) { return v.size(); };Обобщённые лямбды делают функциональный стиль компактнее — одна лямбда для нескольких типов.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.