ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

constメンバ関数とmutable

クラスのメンバ関数名の後ろにconstを付けるとオブジェクトの内容を変更できなくなる。

class Test {
    int num;
public:
    int func(int n) const {
        num = n; // コンパイルエラー
    }
};

mutableキーワードを付けたメンバ変数はconstメンバ関数でも値を変更できる。

class Test {
    int num;
    mutable int num2;
public:
    int func(int n) const {
        //num = n;
        num2 = n; // コンパイルできる
    }
};

constメンバ関数でも値を変更できないだけで、参照することはできる。
外からオブジェクトの内容を変更してほしくない、あるいは内容の変更が無いということを表すためにconstメンバ関数にしておくとよい。