Lambda-Erfassung und veränderbarer erfasster Wert
In C 0x bieten Lambda-Ausdrücke eine leistungsstarke Möglichkeit, lokale Variablen zu erfassen. Standardmäßig werden jedoch nach Wert erfasste Variablen als konstant behandelt. Dies kann zu Einschränkungen bei der Arbeit mit Bibliotheken führen, die eine Änderung des erfassten Werts erfordern.
Stellen Sie sich das folgende Szenario vor:
<code class="cpp">struct foo { bool operator() (const bool &a) { return a; } }; int main() { foo afoo; // Attempt to capture non-const reference by value auto bar = [=]() -> bool { afoo(true); }; }</code>
Dieser Code kann aufgrund eines Versuchs, den erfassten Wert zu ändern, nicht kompiliert werden innerhalb der nicht konstanten Mitgliedsfunktion afoo::operator().
Lösung: Verwendung von veränderlichem Lambda
Zur Erfassung nach Wert unter Beibehaltung der Möglichkeit, die erfasste Variable zu ändern , kann man das Schlüsselwort mutable verwenden. Indem das Lambda als veränderlich deklariert wird, ermöglicht es die Änderung seines internen Zustands, einschließlich erfasster Werte.
<code class="cpp">auto bar = [=]() mutable -> bool { afoo(true); };</code>
In diesem modifizierten Beispiel darf der Operator() des Lambda das erfasste Afoo ändern und die Kompilierung auflösen Fehler. Beachten Sie, dass das Lambda ohne das Schlüsselwort mutable aufgrund seines erfassten nicht konstanten Werts als const betrachtet würde.
Das obige ist der detaillierte Inhalt vonKönnen Lambda-Funktionen nicht konstante Werte in C 0x erfassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!