Krótki przykład:
#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"
}
Pytanie: Dlaczego potrzebujemy mutable
słowa kluczowego? Różni się to od tradycyjnego przekazywania parametrów do nazwanych funkcji. Jakie jest uzasadnienie?
Miałem wrażenie, że celem przechwytywania według wartości jest umożliwienie użytkownikowi zmiany ustawienia tymczasowego - w przeciwnym razie prawie zawsze lepiej jest używać przechwytywania przez odniesienie, prawda?
Jakieś oświecenia?
(Nawiasem mówiąc, używam MSVC2010. AFAIK to powinno być standardowe)
const
jest domyślnie.
const
domyślnie!