c++ の mutable について
まず,mutableってどんな意味なんだと言いますと,
「変更可能な」
という意味だそうです。
プログラム的に一言で申しますと,
constインスタンスのメンバ変数の値を変更可能にする
と言えます。
これで理解できた人は,これ以降読む必要ないですね
そんなんで分かるかぁ!って人は読んでみてくださいw
まず,constインスタンスというのは,CLASS型クラスの
インスタンスをconstで定数化するということで,プログラムで
書くと,下記の様になります。
const CLASS c; または const CLASS * c = new CLASS();
そして,メンバ変数の値を変更可能にするということですが,
それを理解するためには,下記を理解している必要があります。
まず,constを付けると,cの値は変更不可になる。
そりゃそうですね。const int i = 5;とか書くと,iは5以外に変更できません。
それと同じように,cをconstでくくってしまうと,cの値は変更不可になります。
例えば,
class CLASS{
public:
int value;
CLASS(){ value = 0; }
void init()const { value = 0; }//ERROR
};
void main()
{
const CLASS c;
c.value = 1;//ERROR
}
としておいた場合は,デフォルトコンストラクタで初期化した後は
もぅc.valueの値は書き換えられません。
この時,int valueにmutableを書いておいてやると
なんと,c.valueの値を書き換える事が出来るようになります。
例)
class CLASS{
public:
mutable int value;
CLASS(){ value = 0; }
void init()const { value = 0; }//OK
};
void main()
{
const CLASS c;
c.value = 1;//OK
c.init();//OK
}
mutableはconstを掛けた時の例外を生み出すことになるんですね。
まぁ,全変数にmutableを掛けて,宣言時にconstが掛かろうとも,
全部書き換えられるようにしておく っていう使い方があるのかも?