Preface:
mutalbe 的中文意思是“可變的,易變的”,跟 constant(既C++中的const)是反義詞。在C++中,mutable 也是為了突破 const 的限製而設置的。被mutable 修飾的變量,將永遠處於可變的狀態,即使在一個 const 函數中。我們知道,如果類的成員函數不會改變對象的狀態,那麼這個成員函數一般會聲明成 const 的。但是,有些時候,我們需要在 const 的函數里面修改一些跟類狀態無關的數據成員,那麼這個數據成員就可以使用 mutalbe 來修飾.
下面是一個小例子:
- class ClxTest
- {
- public:
- void Output() const;
- };
- void ClxTest::Output() const
- {
- cout << "Output for test!" << endl;
- }
- void OutputTest(const ClxTest& lx)
- {
- lx.Output();
- }
如果現在,我們要增添一個功能:計算每個對象的輸出次數。如果用來計數的變量是普通的變量的話,那麼在 const 成員函數 Output 裡面是不能修改該變量的值的;而該變量跟對象的狀態無關,所以應該為了修改該變量而去掉 Output 的 const 屬性。這個時候,就該我們的 mutable 出場了——只要用 mutable 來修飾這個變量,所有問題就迎刃而解了.
下面是修改過的代碼:
- class ClxTest
- {
- public:
- ClxTest();
- ~ClxTest();
- void Output() const;
- int GetOutputTimes() const;
- private:
- mutable int m_iTimes;
- };
- ClxTest::ClxTest()
- {
- m_iTimes = 0;
- }
- ClxTest::~ClxTest()
- {}
- void ClxTest::Output() const
- {
- cout << "Output for test!" << endl;
- m_iTimes++;
- }
- int ClxTest::GetOutputTimes() const
- {
- return m_iTimes;
- }
- void OutputTest(const ClxTest& lx)
- {
- cout << lx.GetOutputTimes() << endl;
- lx.Output();
- cout << lx.GetOutputTimes() << endl;
- }
沒有留言:
張貼留言