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++; }();
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!