天天看點

C++ 文法實驗室之mutable關鍵字

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 成員函數中的指派操作将變的合法,不會編譯報錯。

繼續閱讀