ExpertiDict

C++ · Intermediário · Português · Técnico

captura de lambda

kapˈtuɾɐ dʒi ˈlɐ̃bdɐsubstantivo

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();    // 10

Exemplos

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

Veja também

Todos os termos de C++