mutable指定子
http://www.geocities.jp/ky_webid/cpp/language/020.html
constメンバ関数に絡んで、mutable指定子というものが存在します。
コレは結構ニッチですね。
constメンバ関数によってメンバ変数が変更されないということを保証するわけですが、mutable付のメンバ変数はconstメンバ関数の干渉を受けずに変更することができます。
「なんだよ、結局constメンバ関数だからといってメンバ変数が変更されないことが保証されてない場合があるってことかよ」と言いたくなりそうですが、考え方次第です。
クラスの内部でしか扱わないような、メンバ変数に関してはmutableを使うケースがあってもおかしくないと思います。
要はクラスの利用者に対して関係性のあるメンバ変数さえ、書き換えされないことが保証されていれば問題ないということです。
クラスの利用者にとってまったく関係の無いメンバ変数がどう扱われようとどうでも良いことですよね。
ということで実装してみます。
class CSample { private: mutable int m_num1; int m_num2; public: int GetNum() const; }; // constメンバ関数 int CSample::GetNum() const { m_num1 = 100; // mutableなので変更可能 m_num2 = 200; // 変更不可。コンパイルエラー return m_num1 + m_num2; }
$ cl /W4 /EHsc main.cpp Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86 Copyright (C) Microsoft Corporation. All rights reserved. main.cpp main.cpp(14) : error C2166: 左辺値は const オブジェクトに指定されています。