Avatar ·

O que é uma expressão lambda em C++ e quando usá-la?

Olá a todos! Estou estudando C++ e frequentemente vejo no código dos colegas algo assim: ```cpp std::vector numbers = {5, 2, 8, 1, 9}; std::sort(numbers.begin(), numbers.end(), [](int a, int b) { return a < b; }); ``` Ou assim: ```cpp std::for_each(numbers.begin(), numbers.end(), [](int& x) { x *= 2; }); ``` Eu entendo que são funções anônimas, mas não compreendo completamente. Na documentação está escrito "expressões lambda", mas as explicações são meio complicadas. Tenho algumas perguntas: 1. O que é uma expressão lambda em termos simples? Como ela difere de uma função comum? 2. Para que servem os colchetes `[]` no início? O que pode ser colocado lá? 3. Quando é melhor usar uma lambda, e quando uma função comum ou functor? 4. Como capturar variáveis corretamente? Eu vi `[=]`, `[&]`, `[this]` — o que isso significa? O que me assusta especialmente é a sintaxe de captura. Tentei escrever meu próprio callback para ordenação usando uma variável externa, e não deu certo. Expliquem, por favor.