0Pricing
C++ Academy · Aula

Expressões lambda: captura, mutable e genéricas

Escreva lambdas com capturas, semântica mutable e parâmetros genéricos auto

Expressões lambda: captura, mutable e genéricas é uma aula grátis de C++ Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C++ Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C++ Academy inclui 4 aulas no total.

O que é uma lambda?

Uma lambda é um objeto de função anônimo definido em linha. Use-a onde, de outro modo, você escreveria uma pequena função nomeada ou uma estrutura com operator().

auto square = [](int x) { return x * x; };
std::cout << square(5);   // 25

Anatomia da sintaxe

Uma lambda tem quatro partes:

  • [capture] — quais variáveis do escopo ao redor devem ser usadas
  • (parameters) — como uma lista de parâmetros de função
  • -> return_type — opcional, geralmente deduzido
  • { body }

Captura vazia

[] significa "não capture nada". A lambda acessa apenas variáveis globais e estáticas.

auto add = [](int a, int b) { return a + b; };

Captura por valor

Liste as variáveis na cláusula de captura para copiá-las para dentro da lambda.

int n = 5;
auto times = [n](int x) { return x * n; };
n = 10;
std::cout << times(3);   // 15 (captured n was 5)

Captura por referência

Use o prefixo & para capturar por referência. As alterações feitas dentro da lambda afetam a variável externa.

int counter = 0;
auto inc = [&counter]() { ++counter; };
inc(); inc(); inc();
std::cout << counter;   // 3

Capturas padrão: [=] e [&]

Capture tudo o que for usado por valor com [=] ou tudo por referência com [&]. Use com cuidado — seja explícito quando puder.

auto f = [=]() { return a + b; };   // copies a, b
auto g = [&]() { return a + b; };   // references a, b

Lambdas mutáveis

Por padrão, as capturas por valor são const dentro da lambda. Adicione mutable para permitir sua modificação — as alterações afetam apenas a cópia dentro da lambda.

int n = 5;
auto f = [n]() mutable {
    n += 1;       // OK because of mutable
    return n;
};
f(); f();        // returns 6, then 7
std::cout << n;  // still 5 in outer scope

Dedução do tipo de retorno

O compilador deduz o tipo de retorno a partir do corpo. Torne-o explícito quando necessário.

auto half = [](int x) -> double { return x / 2.0; };

Lambdas genéricas (C++14)

Use auto na lista de parâmetros para obter uma lambda genérica que funcione com qualquer tipo.

auto print = [](const auto& x) { std::cout << x << "\n"; };
print(42);          // int
print("hello");    // const char*
print(3.14);       // double

Lambdas como argumentos de função

Os algoritmos da STL aceitam lambdas como predicados e transformações.

std::vector<int> v = {5, 2, 8, 1};
std::sort(v.begin(), v.end(), [](int a, int b) { return a > b; });

Lambdas são objetos de função

Internamente, o compilador gera uma classe com operator(). Você pode armazenar lambdas em std::function ou auto.

Verificação rápida

Dentro de uma lambda [n](int x) { return x * n; }, você pode atribuir a n sem tornar a lambda mutable?

Recapitulação

Lambdas são objetos de função anônimos definidos em linha. Capture por valor ou por referência, marque como mutable para modificar capturas por valor e use parâmetros auto para lambdas genéricas no C++14 ou posterior.

Perguntas Frequentes

A aula “Expressões lambda: captura, mutable e genéricas” é grátis?

Sim — o texto completo de “Expressões lambda: captura, mutable e genéricas” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C++ Academy, atualize para CoddyKit PRO. O curso de C++ Academy inclui 4 aulas no total.

O que vou aprender em “Expressões lambda: captura, mutable e genéricas”?

Escreva lambdas com capturas, semântica mutable e parâmetros genéricos auto Você pratica C++ Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C++ Academy?

Nenhuma experiência prévia é necessária. C++ Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “Expressões lambda: captura, mutable e genéricas”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C++ Academy?

Sim. Cada aula de C++ Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. auto, decltype e dedução de tipos
  2. for baseado em intervalos, nullptr e enum class
  3. Expressões lambda: captura, mutable e genéricas
  4. Associações estruturadas e if-init no C++17
← Voltar para C++ Academy