Die Notwendigkeit des Schlüsselwortes mutable
in Lambdas, ist Quelle für große Verwirrung.Lambda-Capture nach Wert und das "veränderbare" Schlüsselwort
Betrachten Sie den Code:
int x = 10;
function<void()> lambda = [=]() mutable {x++; cout << "Inside lambda: x = " << x << "\n";};
cout << "Before lambda: x = " << x << "\n";
lambda();
cout << "After lambda: x = " << x << "\n\n";
Ausgang:
Before lambda: x = 10
Inside lambda: x = 11
After lambda: x = 10
Wie wir die variablen x
bleibt unverändert nach dem Lambda sehen können, so gibt es keine Nebenwirkungen.
Wenn wir jedoch das Schlüsselwort veränderbar "vergessen", erhalten wir einen Fehler.
Da das Argument den Wert in C++ übergibt, macht es keinen Sinn für das veränderbare Schlüsselwort.
Kann jemand (auch im Pseudocode) die vom Compiler erzeugte Klasse anstelle des Lambda schreiben?
Danke
Mögliches Duplikat von [C++ 0x Lambda Capture nach Wert immer const?] (Http: // stackoverflow.com/questions/2835626/c0x-lambda-capture-by-wert-immer-const) – LogicStuff