C++ · Intermediário · Português · Técnico
captura de lambda
Lista entre colchetes que diz quais variáveis do escopo externo a lambda enxerga e se são copiadas ou usadas por referência, como [x], [&x], [=] ou [&].
Onde usar
Em code review, capturar por referência uma variável local que a lambda sobrevive é bug clássico, pois a referência fica pendurada. Capturas explícitas deixam claro o que a lambda usa.
Em código
int n = 5;
auto por_valor = [n] { return n; };
auto por_ref = [&n] { return ++n; };
n = 9;
por_valor(); // 5
por_ref(); // 10Exemplos
Capturei o contador por referência na lambda.
Essa lambda sai da função, então capture por valor.
Cuidado
[=] copia só o ponteiro this, não o objeto, e capturar this implicitamente com [=] é obsoleto no C++20; prefira [this] ou [*this].
Sinônimos
lista de captura