C++ の相反する const と mutable を同時に使う理由 ― 2021年03月18日 11時54分55秒
const は分かりやすい概念。const 変数は、その名の通り不変定数。パイの 3.14 を定義するのに使ったり出来る。const 関数は、クラスの概念。その関数がメンバ変数を変更しないのを確約する。しかし、それに呼応する mutable 関数は無い。
const が無ければ、変更可能なのだが、mutable とはこれ如何に。
mutable 変数は const 関数内でも、値を変更可能な事を示す。mutable は const 関数内でも値を変更できる。そして、mutable 変数と const 関数を合わせた概念はクラス変数の内部状態を変更しない事の明示的な宣言をすること。要約すると、mutable 変数はキャッシュの役割をする変数に使う。const 関数内では、クラスの内部状態などを変更しないが、遅延作業などで、内部の状態を変更しない変数に使う。
例としては、数字を保持する Number クラスの string 型を得たい時等が、あげられる。
class Number
{
int n;
mutable std::string str;
const std::string& to_string() const
{
if( str.empty() )
str = std::to_string( n );
return str;
}
};
const 変数を変えられてしまっては意味無い。const で無いものは元々可変。それ故、mutable 関数は存在しない。
コメント
トラックバック
このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2021/03/18/9358193/tb
※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※なお、送られたコメントはブログの管理者が確認するまで公開されません。