mutable關鍵字是一個少用的關鍵字。而mutable的含義與const正好相反,當一個類的成員變量不能修改時,我們在其聲明處前添加const關鍵字進行修飾。但是,如果這個成員變量是可變的,那我們就使用mutable關鍵字修飾變量類型。
但我們會發現一個問題,那就是不使用const修飾的變量本身就是可以修改的,那爲什麼還要添加mutable關鍵字呢?這裏涉及到一個用法,也是關於mutable的最常用的基本用法了。直接給個例子就明白了。
class OutTestClass
{
public:
OutTestClass()
{
count = 0;
msg = "Hello, World!";
}
public:
void print() const
{
std::cout << msg << std::endl;
++count;
}
private:
mutable int count;
std::string msg;
}
我們可以看到,成員函數print被const修飾,表示不改變類的狀態和不修改類的成員變量。所以當我們在函數中修改普通成員變量時會報錯。但是我們卻在print方法中修改了count的值,但並不會出錯,這是因爲count變量被mutable關鍵字修飾。所以,當成員方法使用const修飾時,我們仍然可以使用其修改mutable修飾的變量。所以,mutable修飾的變量最好是與類的狀態無關。