# 8.4 - Funções Lambda
Funções lambda foram implementadas no C++11 e versões posteriores, onde podemos declarar objetos de funções em forma anônima, normalmente utilizadas quando precisamos de uma função que não precisará existir após ser utilizada.
Sintaxe:
[]() -> T {}
CAPTURAS []
PARÂMETROS ()
TIPO DO RETORNO -> T
CORPO DA FUNÇÃO {}
Chamamos uma função lambda da mesma forma que chamamos uma função normal: nome_variavel()
Exemplo:
#include <iostream>
#include <cstdlib>
int main(int argc, const char **argv)
{
/*|--------------------------------------|
*| |
*| He4rt Developers |
*| |
*|--------------------------------------|
*/
int a(3), b(5);
/* Quando criamos uma lambda, precisamos usar 'auto', pois o tipo de cada função é único. */
auto soma = [](int n1, int n2) {
return n1 + n2;
};
std::cout << soma(a, b);
return EXIT_SUCCESS;
}
Podemos retornar uma função lambda por outra função:
auto func()
{
return [](int var) { return var; }
}
Também podemos criar lambdas que são executadas imediatamente. Esse tipo de função é conhecido como IILE(Immediately Invoked Lambda Expression) ou IIFE(Immediately Invoked Function Expression)
Exemplos:
#include <iostream>
#include <cstdlib>
int main(int argc,const char **argv)
{
/*|--------------------------------------|
*| |
*| He4rt Developers |
*| |
*|--------------------------------------|
*/
[]{ std::cout << "He4rt Developers"; }();
return EXIT_SUCCESS;
}
#include <iostream>
#include <cstdlib>
int main()
{
/*|--------------------------------------|
*| |
*| He4rt Developers |
*| |
*|--------------------------------------|
*/
std::string he4rt = "He4rt";
std::string developers = "Developers";
[](std::string h, std::string d){ std::cout << h + " " + d ;}( he4rt, developers);
// Saida: He4rt Developers
return EXIT_SUCCESS;
}