Avatar ·

¿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.