C++ Captura por referencia


Ejemplo

Si precede el nombre de una variable local con un & , entonces la variable se capturará por referencia. Conceptualmente, esto significa que el tipo de cierre de la lambda tendrá una variable de referencia, inicializada como una referencia a la variable correspondiente desde fuera del alcance de la lambda. Cualquier uso de la variable en el cuerpo lambda se referirá a la variable original:

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

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

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

La palabra clave mutable no es necesaria, porque a sí mismo no es const .

Por supuesto, capturar por referencia significa que la lambda no debe escapar al alcance de las variables que captura. Por lo tanto, puede llamar a funciones que toman una función, pero no debe llamar a una función que almacenará el lambda más allá del alcance de sus referencias. Y no debes devolver la lambda.