Heim >Backend-Entwicklung >C++ >Können C 0x Lambda Captures geändert werden, ohne konstant zu sein?
Können C 0x-Lambda-Erfassungen geändert werden, ohne konstant zu sein?
Lambda-Erfassungen in C 0x erfassen normalerweise Variablen durch Referenz, die von Natur aus konstant sind . Bestimmte Szenarien erfordern jedoch die Änderung erfasster Variablen, was die Frage aufwirft: „Können erfasste Werte nicht-konstant gemacht werden?“
Betrachten Sie einen Bibliotheksfunktor, foo, mit einer nicht-konstanten Methode, „operator()“, das muss innerhalb eines Lambda aufgerufen werden. Das folgende Codefragment versucht dies, kann jedoch nicht kompiliert werden:
<code class="c++">struct foo { bool operator () ( const bool & a ) { return a; } }; auto bar = [=] () -> bool { afoo(true); };</code>
Der Kompilierungsfehler tritt auf, weil der Operator() des Lambda implizit als const markiert ist, da die erfassten Werte konstant sind. Um dieses Problem zu lösen, stellt C 0x das Schlüsselwort mutable bereit.
<code class="c++">auto bar = [=] () mutable -> bool { afoo(true); };</code>
Durch das Hinzufügen von mutable ist der Operator() des Lambda nicht mehr konstant, sodass die erfassten Variablen innerhalb des Lambda geändert werden können. Dies ermöglicht die Änderung von Bibliotheksfunktoren oder anderen nicht konstanten erfassten Werten nach Bedarf innerhalb von Lambdas.
Das obige ist der detaillierte Inhalt vonKönnen C 0x Lambda Captures geändert werden, ohne konstant zu sein?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!