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.