Avatar ·

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

Olá, colegas! Comecei a estudar C++11 e constantemente me deparo com o termo "expressão lambda" (lambda expression). Li a documentação, mas não entendo completamente o que é e, principalmente, para que serve. Aqui está um exemplo que encontrei em um tutorial:
#include <iostream>
#include <vector>
#include <algorithm>

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

    // O que está acontecendo aqui?
    std::for_each(numbers.begin(), numbers.end(), [multiplier](int n) {
        std::cout << n * multiplier << " ";
    });
    return 0;
}
Eu entendo que `std::for_each` aplica uma função a cada elemento, mas a construção `[multiplier](int n) { ... }` me confunde. Por que não posso simplesmente escrever uma função normal ou um functor? Qual é a vantagem das lambdas? Também não entendo o que significam os colchetes `[]`. Em alguns exemplos eles estão vazios, em outros com variáveis dentro. E quando devo usar o