Данные · Контейнеры и алгоритмы

Лямбды

Функции прямо на месте использования

~25 мин 6 шагов

После урока ты сможешь

  • Писать лямбды с параметрами и захватом
  • Понимать разницу между захватом по значению и по ссылке
  • Передавать поведение в функцию

Шаг 1 из 6

Функция прямо на месте

Иногда функция нужна в одном-единственном месте, и выносить её наверх файла с отдельным именем — лишняя церемония. Для этого есть лямбда-выражения: функции, которые пишутся прямо там, где используются.

main.cpp
#include <print>
#include <string>
​
int main() {
    auto square = [](int x) {
        return x * x;
    };
​
    auto greet = [](const std::string& name) {
        std::println("Привет, {}!", name);
    };
​
    std::println("{}", square(7));
    greet("Аня");
}

Синтаксис: [захват](параметры) { тело }. Квадратные скобки — признак лямбды. Тип возвращаемого значения компилятор выводит сам из return. Лямбду кладут в переменную через auto, потому что у каждой лямбды свой уникальный тип, который нельзя написать словами.

Проверь себя

Что выведет программа?

main.cpp
#include <print>
​
int main() {
    auto add = [](int a, int b) { return a + b; };
    std::println("{}", add(2, 3) * 2);
}
Enter — проверить, Shift+Enter — новая строка