クラスのメンバ関数名の後ろに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メンバ関数にしておくとよい。