sto leggendo attraverso il C++ Sezione lambda nel capitolo 3 del this book e il seguente codice mi confonde:C++ lambda cattura per valore
int x = 0;
int y = 42;
auto qqq = [x, &y] {
std::cout << "x: " << x << std::endl;
std::cout << "y: " << y << std::endl;
++y;
};
x = y = 77;
qqq();
qqq();
std::cout << "final y: " << y << std::endl;
Questo codice stampa fuori:
x: 0
y: 77
x: 0
y: 78
final y: 79
Perché qqq() non registri che x è cambiato in 77? È stato affermato che passare per valore significa che possiamo leggere ma non modificare i dati leggibili dove è stato definito il lambda. Significa che non possiamo vedere i cambiamenti dopo la sua definizione?
Hai ragione, quel libro non fornisce una spiegazione molto buona. Le risposte qui sotto fanno un lavoro migliore. – jdigital