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 подскажет развёрнутый ответ в реальном времени.