C++ Cattura predefinita


Esempio

Per impostazione predefinita, non è possibile accedere alle variabili locali che non sono esplicitamente specificate nell'elenco di cattura dall'interno del corpo lambda. Tuttavia, è possibile acquisire implicitamente variabili nominate dal corpo lambda:

int a = 1;
int b = 2;

// Default capture by value
[=]() { return a + b; }; // OK; a and b are captured by value

// Default capture by reference
[&]() { return a + b; }; // OK; a and b are captured by reference

L'acquisizione esplicita può ancora essere eseguita insieme all'acquisizione implicita di default. La definizione di acquisizione esplicita sovrascriverà l'acquisizione predefinita:

int a = 0;
int b = 1;

[=, &b]() {
    a = 2; // Illegal; 'a' is capture by value, and lambda is not 'mutable'
    b = 2; // OK; 'b' is captured by reference
};