Breve ejemplo:
#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"
}
La pregunta: ¿Por qué necesitamos la mutable
palabra clave? Es bastante diferente del paso de parámetros tradicionales a funciones con nombre. ¿Cuál es la razón detrás?
Tenía la impresión de que el objetivo de la captura por valor es permitir que el usuario cambie el temporal; de lo contrario, casi siempre estoy mejor usando la captura por referencia, ¿no?
¿Alguna iluminación?
(Por cierto, estoy usando MSVC2010. AFAIK esto debería ser estándar)
const
por defecto.
const
por defecto!