mutable是一個不常用的關鍵字,但是實際他的用法是很簡單,是以不做詳述,寫此博文隻為自己做好一個筆記。
先上微軟參考MSDN連結:https://msdn.microsoft.com/zh-cn/library/vstudio/4h2h0ktk(v=vs.110).aspx
volatile我喜歡把它翻譯成“易變的”,而且還不知道啥時候就變了
而mutable我喜歡把它翻譯成“可變的”,且無論啥時候都有權利變的。
以下是MSDNdemo
下面的代碼在編譯時不會出錯,因為 m_accessCount 聲明為 mutable,即使 GetFlag 是const修飾成員函數,還可以在 GetFlag 中修改。
class X
{
public:
bool GetFlag() const
{
m_accessCount++;
return m_flag;
}
private:
bool m_flag;
mutable int m_accessCount;
};
什麼時候用:
我認為當你定義了一個const成員函數,你非常不想在裡面允許修改大部分成員變量(還特别怕别人手賤改你的實作cpp代碼指派了),但是除一些少數異類你又确實想自己指派,好吧這就像是一個後門,那想要開這一道後門就使用mutable關鍵字吧。
小結:
mutable關鍵字隻能應用于類的非靜态和非常數資料成員
如果資料成員聲明 mutable,則它在 const 成員函數中的指派操作将變的合法,不會編譯報錯。