Heim >Backend-Entwicklung >C++ >Wann und warum wird das Schlüsselwort „mutable' in C 11-Lambdas mit Capture-by-Value verwendet?

Wann und warum wird das Schlüsselwort „mutable' in C 11-Lambdas mit Capture-by-Value verwendet?

Susan Sarandon
Susan SarandonOriginal
2024-11-28 01:07:141016Durchsuche

When and Why Use the `mutable` Keyword in C  11 Lambdas with Capture-by-Value?

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!

Stellungnahme:
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