mutable ストレージ・クラス指定子は、クラス・データ・メンバーでのみ使用されます。
これは、そのメンバーが const として宣言されたオブジェクトの一部であったとしても、
変更可能にするために使用されます。mutable 指定子を、static または const と宣言された名前と一緒に、
または参照メンバーと一緒に使用することはできません。
class A { public: A() : x(4), y(5) { }; mutable int x; int y; }; int main() { const A var2; var2.x = 345; // var2.y = 2345; }
この例では、コンパイラーは、代入 var2.y = 2345 を許可しません。 なぜなら、var2 は const として宣言されているからです。 コンパイラーは、代入 var2.x = 345 は許可します。 なぜなら、A::x は、mutable として宣言されているからです。
関連参照