Hat „mutable“ über veränderliche Member in Const-Member-Funktionen hinaus weitere Anwendungen?
Das Schlüsselwort „mutable“ in C ermöglicht das Ändern von Datenmembern in const-Memberfunktionen. Einige fragen sich jedoch vielleicht, ob es einen anderen Zweck hat.
In Wirklichkeit unterscheidet das Schlüsselwort „veränderlich“ zwischen bitweisem und logischem „const“. Logisch „const“ gibt an, dass sich ein Objekt über seine öffentliche Schnittstelle nicht sichtbar ändert. Dazu gehören Szenarien wie das Sperren eines Mutex in einer const-Funktion zur Thread-Sicherheit, da die Änderung innerhalb des internen Zustands des Objekts erfolgt und von außen nicht zugänglich ist.
Eine andere Anwendung speichert berechnete Werte zwischen und greift über eine veränderbare Mitgliedsfunktion auf sie zu. Eine solche Funktion kann den Wert einmal abrufen und speichern, wobei die logische „Konstante“ beibehalten wird und dennoch interne Änderungen möglich sind.
Darüber hinaus führte C 11 veränderliche Lambdas ein. Diese ermöglichen die Änderung erfasster Variablen, die normalerweise durch Werte referenziert werden. Zum Beispiel:
int x = 0; auto f1 = [=]() mutable {x = 42;}; // OK auto f2 = [=]() {x = 42;}; // Error
Hier schlägt „f2“ fehl, weil nicht veränderbare Lambda-Erfassungen nicht veränderbar sind. Daher ermöglicht „mutable“ nicht nur die Änderung von Membern in const-Memberfunktionen, sondern erstreckt sich auch auf die Unterscheidung zwischen bitweisem und logischem „const“ und erleichtert die Datenänderung in veränderlichen Lambdas.
Das obige ist der detaillierte Inhalt vonÜber Const-Member-Funktionen hinaus: Welche anderen Verwendungszwecke hat das Schlüsselwort „mutable' in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!