Avatar ·

¿Qué es una expresión lambda en C++ y cuándo se debe usar?

¡Hola, colegas! He empezado a estudiar C++11 y constantemente me encuentro con el término "expresión lambda" (lambda expression). Leí la documentación, pero no termino de entender qué es y, sobre todo, para qué sirve. Aquí hay un ejemplo que encontré en un tutorial:
#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> numbers = {1, 2, 3, 4, 5};
    int multiplier = 3;

    // ¿Qué está pasando aquí?
    std::for_each(numbers.begin(), numbers.end(), [multiplier](int n) {
        std::cout << n * multiplier << " ";
    });
    return 0;
}
Entiendo que `std::for_each` aplica una función a cada elemento, pero me confunde la construcción `[multiplier](int n) { ... }`. ¿Por qué no se puede simplemente escribir una función normal o un functor? ¿Cuál es la ventaja de las lambdas? También no entiendo qué significan los corchetes `[]`. En algunos ejemplos están vacíos, en otros contienen variables. Y cuándo se debe usar