Breve exemplo:
#include <iostream>
int main()
{
int n;
[&](){n = 10;}(); // OK
[=]() mutable {n = 20;}(); // OK
// [=](){n = 10;}(); // Error: a by-value capture cannot be modified in a non-mutable lambda
std::cout << n << "\n"; // "10"
}
A pergunta: por que precisamos do mutable
palavra chave? É bem diferente da passagem tradicional de parâmetros para funções nomeadas. Qual é a lógica por trás?
Fiquei com a impressão de que todo o objetivo da captura por valor é permitir que o usuário altere o temporário - caso contrário, estou quase sempre melhor usando a captura por referência, não?
Alguma iluminação?
(Estou usando o MSVC2010, a propósito. AFAIK isso deve ser padrão)
const
por padrão.
const
por padrão!