天天看點

C++的mutable關鍵字

如果類的成員函數不會改變對象的狀态,那麼這個成員函數一般會聲明成const的。但有些時候我們需要在const成員函數中修改一些與類狀态無關的資料成員,那麼這個資料成員就應該被mutable關鍵字修飾。是以,mutable關鍵字是為突破const的限制而設定的。

一個可變資料成員(mutable data member)永遠不會是const,即使它是const對象的成員。是以,一個const成員函數可以改變一個可變成員的值。

引用《C++ Primer》的一段代碼:

class Screen {
public:
	void some_member() const;
private:
	mutable size_t access_ctr;//即使在一個const對象内也能被修改
};


void some_member() const {
	++access_ctr;//儲存一個計數值,用于記錄成員函數被調用的次數
	//該成員函數需要完成的其他工作...
}
           

我們需要記錄some_member()函數被調用的次數,是以需要修改一個計數變量,這并不涉及類狀态的修改,此時就需要用mutable關鍵字來修飾計數變量。

本文部分内容摘自《C++ Primer(中文版)第五版》