Fácil C++

Lambda que multiplica por um fator capturado

Enunciado

Crie uma lambda que receba um inteiro e retorne esse inteiro multiplicado por um fator. O fator deve ser capturado por valor de uma variável externa chamada fator.

Requisitos

  • A lambda deve capturar fator por valor.
  • A lambda deve receber um int e retornar um int.
  • O programa deve imprimir o resultado para fator = 3 e entrada 5.

Código inicial

#include <iostream>

int main() {
    int fator = 3;
    // Crie a lambda aqui e chame com 5
    
    return 0;
}

Saída esperada

Resultado: 15
Ver dica

Use [fator](int n) { return n * fator; } para capturar por valor.

Mostrar solução
#include <iostream>

int main() {
    int fator = 3;
    // Lambda captura 'fator' por valor e multiplica o argumento
    auto multiplica = [fator](int n) { return n * fator; };
    std::cout << "Resultado: " << multiplica(5) << '\n';
    return 0;
}

Passo a passo

  1. Declaramos int fator = 3; no escopo de main.
  2. A lambda multiplica é definida com [fator], capturando uma cópia de fator.
  3. O parâmetro int n recebe o valor 5 na chamada multiplica(5).
  4. O corpo retorna n * fator, ou seja, 5 * 3.
  5. O resultado é impresso com std::cout.

Por que funciona

A captura por valor copia o valor de fator no momento da criação da lambda. Mesmo que fator mude depois, a lambda usa a cópia original. Isso é seguro e evita referências pendentes.

Erros comuns

  • Esquecer a captura: [](int n) { return n * fator; } gera erro de compilação porque fator não está no escopo.
  • Capturar por referência sem necessidade: [&fator] funciona, mas se fator sair de escopo antes da lambda ser chamada, o comportamento é indefinido.
  • Não incluir <iostream>: erro de compilação ao usar std::cout.

Outra forma de resolver

Usar [=] para capturar tudo por valor:

auto multiplica = [=](int n) { return n * fator; };

Prefira capturas explícitas para deixar claro o que a lambda usa.

Saída esperada

Resultado: 15