Poniższy kod wypisuje 0, ale spodziewam się zobaczyć 1. Mój wniosek jest taki, że funkcje lambda nie są wywoływane przez faktyczne przekazywanie przechwyconych parametrów do funkcji, co oznacza więcej intuicyjny. Czy mam rację, czy też czegoś brakuje?C++ 11 przechwytywanie lambda według wartości przechwytywane w miejscu deklaracji
#include <iostream>
int main(int argc, char **argv){
int value = 0;
auto incr_value = [&value]() { value++; };
auto print_value = [ value]() { std::cout << value << std::endl; };
incr_value();
print_value();
return 0;
}
dzięki. Myślałem o wartości-wartości, ponieważ aktualizacje wartości nie będą widoczne poza funkcją. Wydaje się jednak, że oznacza to również, że aktualizacje poza funkcją nie będą widoczne wewnątrz funkcji. – perreal
To, co może być mylące, brzmi: wartość oznacza "wygeneruj kopię". Lambda ma kopię zmiennej, jej wartość jest podana w momencie deklaracji lambda. Ponieważ lambda ma prywatną kopię, oryginalny obiekt nie jest modyfikowany ani odczytywany wewnątrz lambda. Właśnie dlatego istnieje uchwycenie przez odniesienie w rzeczywistości, aby umożliwić sprawę, którą chcesz zobaczyć/zmodyfikować oryginał. – Klaim