• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Funkcja lambda - capture-list

Object Storage Arubacloud
0 głosów
575 wizyt
pytanie zadane 18 maja 2015 w C i C++ przez Radfler VIP (101,030 p.)
zamknięte 29 maja 2016 przez Radfler

Witam. Czy znajdzie się na forum osoba, która wyjaśni mi co to jest capture-list w funkcji lambda?

Jak wiemy, funkcje (wyrażenie) lambda definiujemy w taki sposób:

[] { /* body */ }

I z tego co się orientuję capture-list umieszcza się w kwadratowych nawiasach.

// Spotkałem się z takim zapisem
auto add = [&](int x, int y) { return x+y; };

Ogólnie przeczytałem już angielską dokumentację (http://en.cppreference.com/w/cpp/language/lambda) jednak chciałbym też uzyskać wyjaśnienie po polsku. Czy wytłumaczy mi ktoś co to jest i kiedy może się przydać? I proszę o jak najbardziej wyczerpującą odpowiedź, a nie o linki do stron :)

komentarz zamknięcia: Rozwiązane.

1 odpowiedź

+3 głosów
odpowiedź 18 maja 2015 przez adrian17 Ekspert (344,860 p.)
wybrane 14 kwietnia 2016 przez Radfler
 
Najlepsza
​int liczba = 0;

// błąd - lambda nie ma dostępu do zewnętrznych zmiennych
auto l1 = []() {return liczba;};

// zmienna liczba jest przechwytywana do lambdy przez kopiowanie
auto l2 = [liczba]() {return liczba;};

// zmienna liczba jest przechwytywana do lambdy przez referencję
auto l3 = [&liczba]() {return liczba;};

// jak l2, ale kompilator sam się domyśla jakie zmienne przechwycić (przez wartość)
auto l4 = [=]() {return liczba;};

// jak l3, ale kompilator sam się domyśla jakie zmienne przechwycić (przez referencję)
auto l5 = [&]() {return liczba;};

// inne kombinacje:

// przechwyć liczbę przez referencję, inne zmienne przez wartość
auto l7 = [=, &liczba]() {return liczba;};

// na odwrót
auto l8 = [&, liczba]() {return liczba;};

W takim zapisie:

auto add = [&](int x, int y) { return x+y; };

& jest niepotrzebne, bo nic nie jest przechwytywane.

komentarz 18 maja 2015 przez Radfler VIP (101,030 p.)
Dzięki   :')

Podobne pytania

0 głosów
1 odpowiedź 163 wizyt
pytanie zadane 21 października 2020 w Python przez cba Użytkownik (620 p.)
0 głosów
1 odpowiedź 855 wizyt
pytanie zadane 13 grudnia 2018 w Inne języki przez k222 Nałogowiec (30,150 p.)
+1 głos
1 odpowiedź 188 wizyt
pytanie zadane 18 marca 2022 w C i C++ przez humus Nowicjusz (160 p.)

92,555 zapytań

141,402 odpowiedzi

319,540 komentarzy

61,938 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...