Lambda-Erfassung nach Wert: Sicherstellen nicht konstanter erfasster Werte in C 0x
Bei der Erfassung nach Wert in C 0x-Lambda-Ausdrücken werden die erfassten Die Werte werden automatisch konstant gehalten. Dies kann ein Problem sein, wenn Sie die erfassten Werte innerhalb des Lambda ändern müssen.
Betrachten Sie beispielsweise das folgende Lambda, das eine Struktur foo nach Wert erfasst:
<code class="cpp">struct foo { bool operator() (const bool &a) { return a; } }; int main(int argc, char* argv[]) { foo afoo; auto bar = [=] () -> bool { afoo(true); }; return 0; }</code>
Dieser Code wird nicht kompiliert, da die Methode „operator()“ von „foo“ als „const“ deklariert ist. Um das Problem zu beheben, können Sie die Methode „operator()“ nicht konstant machen:
<code class="cpp">struct foo { bool operator() (bool &a) { return a; } };</code>
Dies ist jedoch nicht immer eine wünschenswerte Lösung. In einigen Fällen möchten Sie möglicherweise einen Wert für den Wert erfassen, aber dennoch sicherstellen, dass er nicht innerhalb des Lambda geändert wird.
Um dies zu erreichen, können Sie das Schlüsselwort mutable verwenden. Durch die Deklaration des Lambda als [=] () veränderbar -> bool, Sie erlauben dem Lambda, die erfassten Werte zu ändern.
Beispiel:
<code class="cpp">auto bar = [=] () mutable -> bool { afoo(true); };</code>
In diesem Beispiel kann das Lambda jetzt sogar das erfasste Afoo-Objekt ändern obwohl es durch den Wert erfasst wird.
Das obige ist der detaillierte Inhalt vonWie kann ich erfasste Werte in C 0x Lambdas bei der Erfassung nach Wert ändern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!