mutable


Diese Speicherklasse wird im Zusammenhang mit konstanten Member-Funktionen und konstanten Objekten verwendet.


Eine konstante Member-Funktion hat folgende Eigenheit: Man darf damit keine Membervariablen ändern und keine nicht-konstanten Member-Funktionen aufrufen, denn diese könnten Member-Variablen ändern. Von einem konstanten Objekt darf man folglich nur konstante Methoden aufrufen, damit man das konstante Objekt nicht ändert.


Es gibt hier aber eine Ausnahmeregelung:


Mit mutable definierte Member-Variablen einer Klasse dürfen auch durch deren Member-Funktionen, die mit const gekennzeichnet sind, verändert werden. mutable überschreibt also in diesem Fall das const-Attribut der Member-Funktion. Außerdem erlaubt mutable die Veränderung einer Member-Variable, wenn von dieser Klasse ein const-Objekt definiert wurde.


Diese Fähigkeit verwendet man, wenn man z.B. Member-Variablen hat, die den Zustand des Objektes nicht beeinflussen.




Die Speicherklasse mutable darf übrigens nicht mit const und static zusammen eingesetzt werden:

mutable const int NUMBER = 42; // nicht erlaubt
mutable static long Value;    
// nicht erlaubt


Übersicht Keywords C++