Kurzes Beispiel:
#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"
}
Die Frage: Warum brauchen wir das mutable
Schlüsselwort? Es unterscheidet sich erheblich von der herkömmlichen Parameterübergabe an benannte Funktionen. Was ist der Grund dafür?
Ich hatte den Eindruck, dass der Sinn der Erfassung nach Wert darin besteht, dem Benutzer zu ermöglichen, die temporäre Erfassung zu ändern - ansonsten ist es fast immer besser, die Erfassung nach Referenz zu verwenden, nicht wahr?
Irgendwelche Erleuchtungen?
(Ich benutze übrigens MSVC2010. AFAIK das sollte Standard sein)
const
standardmäßig ist.
const
standardmäßig ist!