C++-Programmierung/ Im Zusammenhang mit Klassen/ mutable und volatile


Bereits in einem vorherigen Kapitel haben Sie konstante Funktionen in Klassen kennen gelernt. Diese können keine Membervariablen der Klasse ändern. Keine? Doch: Membervariablen, die mutable sind, lassen sich selbst durch konstante Funktionen verändern:

class Foo {
    mutable int i1;
    int i2;
    void Func() {
        i1++; i2++; // Erlaubt
    }
    void constFunc() const {
        i1++; // Erlaubt! i1 ist mutable.
        i2++; // Fehler: i2 ist nicht mutable, aber Member von Foo. Da constFunc const ist, darf es i2 nicht verändern.
    }
};

Sinn und Zweck

Bearbeiten

Sie werden sich fragen, was mutable soll, da es immerhin den Sinn einer konstanten Memberfunktion, d.h. die Garantie nichts an der Klasse zu verändern untergräbt. Das stimmt auch. Es gibt aber durchaus Fälle, wo der Einsatz von mutable sinnvoll ist. Stellen Sie sich beispielsweise vor, Sie möchten für Debuggingzwecke die Anzahl der Aufrufe einer konstanten Memberfunktion zählen. Dann können Sie mutable einsetzen und die Funktion gilt weiterhin als konstant. Generell kann man sagen, dass mutable nicht eingesetzt werden sollte, wenn die Veränderung dieser Variable das Erscheinungsbild des Objekts von Außen verändert.