РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
29 of 815 menu

Захват лямбды

Захват лямбды определяет, какие внешние переменные будут доступны внутри тела лямбда-выражения. Захват указывается в квадратных скобках после ключевого слова []. Внутри скобок можно перечислить конкретные переменные или использовать специальные символы: '=' для захвата по значению и '&' для захвата по ссылке. Также можно комбинировать оба способа и захватывать переменные с указанием их имени.

Синтаксис

[&] { /* capture all by reference */ } [=] { /* capture all by value */ } [x, &y] { /* capture x by value, y by reference */ } [&, x] { /* capture all by reference, x by value */ } [=, &y] { /* capture all by value, y by reference */ }

Пример

Давайте захватим переменную по значению и выведем её внутри лямбды:

#include <iostream> using namespace std; int main() { int x = 5; auto func = [x]() { cout << x << endl; }; func(); return 0; }

Результат выполнения кода:

5

Пример

Давайте захватим переменную по ссылке и изменим её внутри лямбды:

#include <iostream> using namespace std; int main() { int x = 5; auto func = [&x]() { x = 10; }; func(); cout << x << endl; return 0; }

Результат выполнения кода:

10

Пример

Давайте захватим все переменные по значению с помощью символа '=':

#include <iostream> using namespace std; int main() { int x = 5; int y = 10; auto func = [=]() { cout << x + y << endl; }; func(); return 0; }

Результат выполнения кода:

15

Пример

Давайте захватим все переменные по ссылке с помощью символа '&' и изменим их:

#include <iostream> using namespace std; int main() { int x = 5; int y = 10; auto func = [&]() { x = 20; y = 30; }; func(); cout << x << " " << y << endl; return 0; }

Результат выполнения кода:

20 30

Пример

Давайте скомбинируем захват: все по ссылке, а переменную x - по значению:

#include <iostream> using namespace std; int main() { int x = 5; int y = 10; auto func = [&, x]() { cout << x << " " << y << endl; }; func(); return 0; }

Результат выполнения кода:

5 10

Смотрите также

  • ключевое слово lambda,
    которое создаёт анонимную функцию
  • ключевое слово auto,
    которое выводит тип переменной автоматически
  • ключевое слово const,
    которое делает переменную неизменяемой
  • ключевое слово mutable,
    которое позволяет изменять захваченные по значению переменные
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить