Menu
Coddy logo textTech

Введение в Lambda-выражения

Часть раздела Логика и управление потоком путешествия по C++ на Coddy — урок 42 из 56.

Лямбда-выражения — это мощная возможность C++, которая позволяет создавать небольшие анонимные функции прямо там, где они вам нужны. Представьте их как мини-функции, которые можно определять и использовать без необходимости писать отдельное объявление функции.

Базовый синтаксис лямбда-выражения следует этому шаблону: [](){}. Квадратные скобки [] называются списком захвата (capture clause), круглые скобки () содержат параметры (как и в обычных функциях), а фигурные скобки {} содержат тело функции.


Список захвата определяет, какие переменные из внешней области видимости может использовать лямбда-выражение. Наиболее распространенные формы:

[=] — захват всех локальных переменных по значению (лямбда получает собственную копию)
[&] — захват всех локальных переменных по ссылке (лямбда обращается к оригиналам)
[] — ничего не захватывать (лямбда не может использовать внешние переменные)

Вот как создать и вызвать простое лямбда-выражение:

auto myLambda = []() {
    std::cout << "Hello from Lambda!" << std::endl;
};

myLambda();  // Вызов лямбда-функции

Вы также можете определить и выполнить лямбда-выражение немедленно, не сохраняя его в переменной:

[]() {
    std::cout << "Immediate execution!" << std::endl;
}();

Лямбда-выражения особенно полезны для коротких, одноразовых функций, которые вы не хотите определять отдельно. Они делают ваш код более лаконичным и позволяют держать связанную логику вместе.

challenge icon

Задание

Легко

Создайте программу, которая демонстрирует базовый синтаксис и выполнение лямбда-выражений. Это задание проверит ваше понимание того, как определять и вызывать простые лямбда-функции без параметров.

Ваша программа должна:

  1. Создать лямбда-выражение, которое выводит Hello from Lambda!
  2. Сохранить это лямбда-выражение в переменную, используя ключевое слово auto
  3. Вызвать лямбда-функцию для её выполнения
  4. Создать второе лямбда-выражение, которое выводит Lambda executed successfully!
  5. Выполнить это второе лямбда-выражение немедленно, не сохраняя его в переменную

Используйте следующий точный формат вывода:

Hello from Lambda!
Lambda executed successfully!

Помните, что лямбда-выражения используют синтаксис [](){}, где квадратные скобки [] — это список захвата (capture clause), круглые скобки () содержат параметры (пустые для этого задания), а фигурные скобки {} содержат тело функции. Вы можете сохранить лямбда-выражение в переменной, используя auto variableName = [](){...};, а затем вызвать его с помощью variableName();. Для немедленного выполнения можно использовать синтаксис [](){...}();, который определяет и вызывает лямбда-выражение в одной инструкции.

Шпаргалка

Лямбда-выражения — это анонимные функции, которые могут быть определены внутри кода. Они используют синтаксис [](){}, где:

  • [] — список захвата (управляет доступом к внешним переменным)
  • () — параметры
  • {} — тело функции

Распространенные формы списка захвата:

  • [] — ничего не захватывать
  • [=] — захватывать все внешние переменные по значению
  • [&] — захватывать все внешние переменные по ссылке

Сохранение и вызов лямбда-выражения:

auto myLambda = []() {
    std::cout << "Hello from Lambda!" << std::endl;
};

myLambda();  // Вызов лямбда-функции

Немедленное выполнение лямбда-выражения:

[]() {
    std::cout << "Immediate execution!" << std::endl;
}();

Попробуйте сами

#include <iostream>
using namespace std;

int main() {
    // TODO: Напишите свой код ниже
    // Создайте лямбда-выражение, которое выводит "Hello from Lambda!"
    // Сохраните его в переменную, используя ключевое слово auto
    
    // Вызовите лямбда-функцию
    
    // Создайте вторую лямбду, которая выводит "Lambda executed successfully!"
    // Выполните её немедленно, не сохраняя в переменную
    
    return 0;
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком