Herb Sutter odpowiedział na pytanie here jak następuje;
Rozważmy przykład słoma człowieka, gdzie programator rejestruje zmienną lokalną wartością i próbuje modyfikować przechwycony wartości (która jest zmienną element obiektu lambda)
int val = 0;
auto x = [=](item e) // look ma, [=] means explicit copy
{ use(e,++val); }; // error: count is const, need ‘mutable’
auto y = [val](item e) // darnit, I really can’t get more explicit
{ use(e,++val); }; // same error: count is const, need ‘mutable’
Ta funkcja prawdopodobnie została dodana z powodu obawy, że użytkownik może nie zdawać sobie sprawy, że dostał kopię, a w szczególności, ponieważ lambdas można kopiować, może on zmieniać nt kopii Lambda.
Uwaga: To jest dokument propozycji zmiany tej funkcji.
Domyślnie operatorem stosowania zamknięcia jest "const". Nadal możesz modyfikować przechwycone zmienne za pomocą 'mutable':' [x]() mutable {x = 1; } 'Zobacz także: http://stackoverflow.com/q/5501959 – dyp