C++ Cattura per riferimento


Esempio

Se precedi il nome di una variabile locale con un & , allora la variabile verrà catturata per riferimento. Concettualmente, ciò significa che il tipo di chiusura di lambda avrà una variabile di riferimento, inizializzata come riferimento alla variabile corrispondente al di fuori dell'ambito del lambda. Qualsiasi utilizzo della variabile nel corpo lambda farà riferimento alla variabile originale:

// Declare variable 'a'
int a = 0;

// Declare a lambda which captures 'a' by reference
auto set = [&a]() {
    a = 1;
};

set();
assert(a == 1);

La parola chiave mutable non è necessaria, perché a stessa non è const .

Naturalmente, catturare per riferimento significa che il lambda non deve sfuggire allo scopo delle variabili che cattura. Quindi puoi chiamare funzioni che svolgono una funzione, ma non devi chiamare una funzione che memorizzerà il lambda oltre la portata dei tuoi riferimenti. E tu non devi restituire il lambda.