Breve esempio:
#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 domanda: perché abbiamo bisogno della mutable
parola chiave? È abbastanza diverso dal parametro tradizionale che passa alle funzioni con nome. Qual è la logica alla base?
Avevo l'impressione che l'intero punto di acquisizione per valore sia consentire all'utente di modificare il temporaneo, altrimenti sto quasi sempre meglio usando l'acquisizione per riferimento, non è vero?
Qualche illuminazione?
(Sto usando MSVC2010 a proposito. AFAIK questo dovrebbe essere standard)
const
di default.
const
di default!