¿Qué es una expresión lambda en C++ y cuándo se debe usar?
¡Hola a todos! Estoy aprendiendo C++ y a menudo veo en el código de mis colegas algo como esto:
```cpp
std::vector numbers = {5, 2, 8, 1, 9};
std::sort(numbers.begin(), numbers.end(), [](int a, int b) { return a < b; });
```
O así:
```cpp
std::for_each(numbers.begin(), numbers.end(), [](int& x) { x *= 2; });
```
Entiendo que son funciones anónimas, pero no las comprendo del todo. En la documentación dice "expresiones lambda", pero las explicaciones son algo complicadas. Tengo varias preguntas:
1. ¿Qué es una expresión lambda en palabras simples? ¿En qué se diferencia de una función normal?
2. ¿Para qué sirven los corchetes `[]` al inicio? ¿Qué se puede escribir allí?
3. ¿Cuándo es mejor usar una lambda y cuándo una función normal o un functor?
4. ¿Cómo capturar variables correctamente? He visto `[=]`, `[&]`, `[this]` — ¿qué significa?
Me asusta especialmente la sintaxis de captura. Intenté escribir mi propio callback para ordenar usando una variable externa, y no funcionó. Explíquenme, por favor.