Heim > Backend-Entwicklung > C++ > Hauptteil

Ist die Lambda-Erfassung nach Wert in C 0x immer konstant?

Linda Hamilton
Freigeben: 2024-10-30 19:42:30
Original
251 Leute haben es durchsucht

Is Lambda Capture by Value Always Constant in C  0x?

Lambda-Erfassung nach Wert in C 0x immer konstant?

Dieses Problem tritt auf, wenn versucht wird, einen Wert durch Referenz zu erfassen, aber seinen Inhalt darin zu ändern ein Lambda-Ausdruck. Der Compiler behandelt erfasste Werte standardmäßig als Konstanten und stellt so sicher, dass sie unverändert bleiben. Einige Szenarien erfordern jedoch möglicherweise einen nicht konstanten Zugriff auf erfasste Werte.

Erfassung nach Wert verstehen:
In C 0x können Lambda-Funktionen Variablen nach Wert oder Referenz erfassen. Bei der Erfassung nach Wert wird eine Kopie der Variablen innerhalb des Lambda-Bereichs erstellt, sodass Änderungen innerhalb des Lambda möglich sind. Standardmäßig werden erfasste Kopien jedoch als konstant behandelt, wodurch ihre Änderung verhindert wird.

Mutable-Schlüsselwort zur Rettung:
Um diese Einschränkung zu überwinden, kann das Mutable-Schlüsselwort verwendet werden. Indem wir der Parameterliste eines Lambda „mutable“ voranstellen, deklarieren wir den erfassten Wert explizit als änderbar innerhalb des Lambda-Bereichs. Dies ermöglicht den nicht-konstanten Zugriff auf den erfassten Wert und löst das im bereitgestellten Code-Snippet beschriebene Problem.

Beispiel:
Betrachten Sie den folgenden Code, der versucht, einen Wert per Referenz zu erfassen und einen nicht-konstanten Wert aufzurufen Methode:

struct foo
{
bool Operator () ( const bool & a )
{

return a;
Nach dem Login kopieren

}
};

int main()
{
foo afoo;

auto bar = [=] () -> bool

{
  afoo(true);
};
Nach dem Login kopieren

return 0;
}

In diesem Code wird das Kompilierungsproblem dadurch behoben, dass foo::operator() const erstellt wird. Die Verwendung von mutable direkt im Lambda-Ausdruck bietet jedoch mehr Flexibilität und ermöglicht einen nicht konstanten Zugriff auf den erfassten Wert, ohne die ursprüngliche Deklaration zu ändern

Das obige ist der detaillierte Inhalt vonIst die Lambda-Erfassung nach Wert in C 0x immer konstant?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage