Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Лямбда-функції | Деякі Розширені Теми
Функції C++

Лямбда-функції

Свайпніть щоб показати меню

Лямбда-функції, або анонімні функції, — це можливість створювати невеликі, безіменні функції безпосередньо у вашому коді. Вони особливо корисні, коли потрібна проста функція на короткий час і немає бажання визначати окрему іменовану функцію.

Лямбда-функції корисні з кількох причин:

Лаконічність
expand arrow

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

Локальна область видимості
expand arrow

Вони можуть захоплювати змінні з навколишньої області видимості, що дозволяє використовувати змінні з батьківської функції всередині лямбди.

Гнучкість
expand arrow

Лямбди можна передавати як аргументи до інших функцій, що робить їх зручними для таких функцій, як std::for_each, std::sort тощо.

Як створити лямбда-функцію?

Ви можете використати наступний синтаксис для створення лямбда-функції.

lambda_function.h

lambda_function.h

123
[capture_clause](parameter_list) -> return_type { // function body }

Клауза захоплення у лямбда-функції дозволяє вказати, які змінні з навколишньої області видимості (поза лямбда-функцією) можуть бути доступні та використовуватись всередині лямбда-функції. Існує 3 основних типи клауза захоплення:

  • Без захоплення []: лямбда-функція не має доступу до жодних змінних з навколишньої області видимості;

  • Захоплення конкретних змінних за значенням [var1, var2, ...]: лямбда-функція може отримати доступ до конкретних змінних з навколишньої області видимості за значенням;

  • Захоплення конкретних змінних за посиланням [&var1, &var2, ...]: лямбда-функція може отримати доступ до конкретних змінних з навколишньої області видимості за посиланням.

main.cpp

main.cpp

1234567891011121314
#include <iostream> int main() { int multiplier = 2; // Lambda function capturing `multiplier` by reference // With explicit return type (`int`) int result = [&multiplier](int num) -> int { return num * num * multiplier; }(5); // Invoking the lambda with argument 5 std::cout << result << std::endl; }

Функція створюється наступним чином:

  • Лямбда-функція захоплює змінну multiplier за посиланням [&multiplier];

  • Тип повернення -> int вказує, що лямбда-функція повертає ціле число;

  • Лямбда негайно викликається з аргументом 5, а результат зберігається у змінній result.

question mark

Яке призначення клауза захоплення у лямбда-функції?

Виберіть правильну відповідь

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 4. Розділ 4

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Секція 4. Розділ 4
some-alt