Heim > Backend-Entwicklung > C++ > Warum sind C 11-Lambdas, die nach Wert erfasst werden, standardmäßig veränderbar?

Warum sind C 11-Lambdas, die nach Wert erfasst werden, standardmäßig veränderbar?

DDD
Freigeben: 2024-12-01 03:57:11
Original
808 Leute haben es durchsucht

Why are C  11 Lambdas Capturing by Value Mutable by Default?

Veränderlichkeit und Lambda-Erfassung nach Wert in C 11

Lambda-Ausdrücke in C 11 ermöglichen die Erfassung externer Variablen, entweder durch Referenz oder nach Wert. Bei der Erfassung nach Wert ist jedoch standardmäßig das Schlüsselwort veränderbar erforderlich. Dies hat Fragen hinsichtlich seiner Notwendigkeit aufgeworfen, insbesondere angesichts der Tatsache, dass die traditionelle Parameterübergabe an benannte Funktionen keine Veränderlichkeit erfordert.

Die Begründung hinter der Veränderlichkeit

Der Hauptunterschied liegt in der Natur von Lambdas als Funktionsobjekte. Sie sind so konzipiert, dass sie bei jedem Aufruf konsistente Ergebnisse liefern. Wenn ein Lambda-Ausdruck seine erfassten Variablen ändern könnte, ohne sie als veränderlich zu deklarieren, würde er gegen dieses Prinzip verstoßen. Daher geht der Compiler standardmäßig davon aus, dass Capture-by-Value-Variablen unverändert bleiben sollten.

Mutable Declaration

Das Schlüsselwort mutable ermöglicht die explizite Änderung von Capture-By-Value-Variablen. By-Value-Variablen innerhalb eines Lambda-Ausdrucks. Es erkennt an, dass sich das Funktionsobjekt je nach aktuellem Zustand anders verhalten soll. Beispielsweise erhöht das folgende Lambda bei jeder Ausführung einen Zähler:

int n = 0;
[mutable](){ n++; }();
Nach dem Login kopieren

Implikationen und Alternativen

Die Anforderung der Veränderlichkeit bei der Erfassung nach Wert gewährleistet dass Lambdas deterministisches Verhalten beibehalten. In vielen Fällen, in denen die erfasste Variable nicht extern geändert werden soll, entfällt außerdem die Notwendigkeit einer Erfassung per Referenz. Es ist jedoch zu beachten, dass die übermäßige Verwendung von Mutable die Klarheit des Codes beeinträchtigen und möglicherweise Nebenwirkungen mit sich bringen kann.

Das obige ist der detaillierte Inhalt vonWarum sind C 11-Lambdas, die nach Wert erfasst werden, standardmäßig veränderbar?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage