Heim >Backend-Entwicklung >C++ >Wann und warum wird das Schlüsselwort „mutable' in C 11-Lambdas mit Capture-by-Value verwendet?
Veränderliches Schlüsselwort in C 11-Lambdas für Capture-by-Value
Capture-by-Value in C 11-Lambdas ermöglicht die Erfassung des Lambda eine Variable aus ihrem Gültigkeitsbereich entfernen, indem Sie eine Kopie erstellen. Diese Kopie ist jedoch standardmäßig als unveränderlich markiert, was bedeutet, dass das Lambda sie nicht ändern kann.
Begründung für die Veränderbarkeit
Der Grund für dieses Standardverhalten liegt im Wesentlichen Prinzip von Funktionsobjekten: Sie sollten bei jedem Aufruf das gleiche Ergebnis liefern. Wenn ein Lambda eine erfasste Variable ändern könnte, würde es gegen dieses Prinzip verstoßen.
Durch die Verwendung des Schlüsselworts mutable erklärt der Programmierer explizit, dass das Lambda die erfasste Variable ändern kann. Diese Lockerung ist notwendig, da Capture-by-Value so konzipiert ist, dass Lambda-Benutzer die erfassten temporären Werte ändern können. In diesem Fall ist es sinnvoll, Änderungen unter der Kontrolle des Programmierers zuzulassen.
Beispiel
Bedenken Sie den von Ihnen bereitgestellten Codeausschnitt:
// ... // [=](){n = 10;}(); // Error: a by-value capture cannot be modified in a non-mutable lambda
Dieser Code löst einen Fehler aus, da das Lambda n nach Wert erfasst und versucht, ihn zu ändern, ohne das Schlüsselwort mutable zu verwenden. Um diesen Code gültig zu machen, verwenden Sie mutable:
// ... [=]() mutable {n = 10;}();
Fazit
Das Schlüsselwort mutable in C 11-Lambdas für Capture-by-Value dient als Erinnerung an diese Funktion Objekte sollten im Allgemeinen konsistente Ergebnisse liefern. Wenn es notwendig ist, eine erfasste Variable zu ändern, lässt das Schlüsselwort mutable dies explizit zu. Durch das Verständnis dieses Grundprinzips können Programmierer Lambdas effektiv nutzen und potenzielle Fehler vermeiden.
Das obige ist der detaillierte Inhalt vonWann und warum wird das Schlüsselwort „mutable' in C 11-Lambdas mit Capture-by-Value verwendet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!