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