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
fatorpor valor. - A lambda deve receber um
inte retornar umint. - O programa deve imprimir o resultado para
fator = 3e entrada5.
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
- Declaramos
int fator = 3;no escopo demain. - A lambda
multiplicaé definida com[fator], capturando uma cópia defator. - O parâmetro
int nrecebe o valor 5 na chamadamultiplica(5). - O corpo retorna
n * fator, ou seja,5 * 3. - 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 porquefatornão está no escopo. - Capturar por referência sem necessidade:
[&fator]funciona, mas sefatorsair de escopo antes da lambda ser chamada, o comportamento é indefinido. - Não incluir
<iostream>: erro de compilação ao usarstd::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