mutableについて

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が掛かろうとも,
全部書き換えられるようにしておく っていう使い方があるのかも?

comments

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*