「C++における`mutable`の意味は何ですか?」
C++において、キーワードmutableはクラスのメンバ変数を修飾する際に使われます。mutable修飾されたメンバ変数はconstメンバ関数内で変更することができるという意味です。
通常、constメンバ関数はオブジェクトのメンバ変数を変更することは許されません。しかし、特殊なケースでconstメンバ関数内で特定のメンバ変数の値を変更する必要が出てくることがあります。その場合、mutableキーワードを使用してそのメンバ変数をマークし、constメンバ関数内で変更できるようにします。
mutableキーワードで修飾されたメンバ変数は、constメンバ関数内での変更操作はすべて有効です。これは、オブジェクトの不変性を保護しつつ、特定のメンバ変数がconstメンバ関数内で変更されることを許可するためです。
mutableキーワードの使用例を以下に示します:
class MyClass {
public:
void setValue(int value) const {
// 修改被 mutable 修饰的成员变量
mutableValue = value;
}
int getValue() const {
// const 成员函数可以访问和读取 mutable 成员变量
return mutableValue;
}
private:
mutable int mutableValue;
};
上記の例では、mutableValueはmutable修飾子のついたメンバ変数です。setValueはconstメンバ関数ですが、mutableValueの値を変更することができます。一方、getValueは別のconstメンバ関数であり、mutableValueの値を読み取ることはできますが、変更することはできません。
mutableキーワードは、静的メンバ変数やグローバル変数には使用できず、非静的メンバ変数にのみ使用できることに注意が必要です。