程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 深入理解C++中的mutable關鍵字

深入理解C++中的mutable關鍵字

編輯:C++入門知識

mutalbe的中文意思是“可變的,易變的”,跟constant(既C++中的const)是反義詞。

  在C++中,mutable也是為了突破const的限制而設置的。被mutable修飾的變量,將永遠處於可變的狀態,即使在一個const函數中。

  我們知道,如果類的成員函數不會改變對象的狀態,那麼這個成員函數一般會聲明成const的。但是,有些時候,我們需要在const的函數裡面修改一些跟類狀態無關的數據成員,那麼這個數據成員就應該被mutalbe來修飾。

  下面是一個小例子:
[cpp]
<span style="font-size:13px;">class ClxTest 

 public: 
  void Output() const; 
}; 
 
void ClxTest::Output() const 

 cout << "Output for test!" << endl; 

 
void OutputTest(const ClxTest& lx)</span> 

  類ClxTest的成員函數Output是用來輸出的,不會修改類的狀態,所以被聲明為const的。

  函數OutputTest也是用來輸出的,裡面調用了對象lx的Output輸出方法,為了防止在函數中調用其他成員函數修改任何成員變量,所以參數也被const修飾。

  如果現在,我們要增添一個功能:計算每個對象的輸出次數。如果用來計數的變量是普通的變量的話,那麼在const成員函數Output裡面是不能修改該變量的值的;而該變量跟對象的狀態無關,所以應該為了修改該變量而去掉Output的const屬性。這個時候,就該我們的mutable出場了——只要用mutalbe來修飾這個變量,所有問題就迎刃而解了。

  下面是修改過的代碼:
[cpp]
<span style="font-size:13px;">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; 

</span> 
計數器m_iTimes被mutable修飾,那麼它就可以突破const的限制,在被const修飾的函數裡面也能被修改。


摘自 wangwang4whu

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved