C++11中推出了一種特殊的關鍵字:mutable用于修飾類變量。 它的作用是標注該變量一定會被修改,因此也就不是const類型。 目的是為了使這些成員變量在被const關鍵字修飾的成員函數中使用時,可以被修改。
但是我們會發現一個問題,那就是不使用const修飾的變量本身就是可以修改的,那為什么還要添加mutable關鍵字呢? 這里涉及到一個用法,也是關于mutable的最常用的基本用法了。 如果不希望類成員函數修改類對象的狀態,那么這個成員函數一般會被const修飾,修飾成員函數后就不可以更改成員變量。 如果我們需要在const成員函數中修改一些與類對象狀態無關的成員變量,就可以用mutable來將這些成員變量修改為可變的。
直接看下面這個例子:
#include
class Car
{
public:
Car();
~Car();
int getPrice() const; /*調用方法 const成員函數*/
int getLen() const; /*調用方法 const成員函數*/
private:
int m_carPrice;
int m_carLen;
mutable int m_carNum;
};
Car::Car()
{
m_carPrice = 50000;
m_carLen = 5;
m_carNum = 5;
}
Car::~Car()
{
}
int Car::getPrice() const
{
m_carNum++; //此處修改是可以,因為對m_carNum進行了mutable限定
std::cout << m_carPrice << std::endl;
return m_carPrice ; // 無法修改該成員變量
}
int Car::getLen() const
{
return m_carLen; // 無法修改該成員變量
}
可以看到,在C++中被const修飾的成員函數無法修改類的成員變量,成員變量在該函數中處于只讀狀態。 然而,在某些場合我們還是需要在const成員函數中修改成員變量的值,被修改的成員變量與類本身并無多大關系,也許你會說,去掉函數的const關鍵字就行了。 可問題是,我只想修改某個變量的值,其他變量希望仍然被const關鍵字保護。 這樣做相當于在函數中給mutable變量開了特例。
簡單理解,在C++中,mutable就是為了突破成員函數 const的限制,可以在const函數里面來修改被mutable修飾的成員變量。 即使在一個const函數中,被mutable修飾的變量,將永遠處于可變的狀態。 這樣,既保護了其他成員變量,又能達到我們單獨修改成員變量count值的目的。
-
函數
+關注
關注
3文章
4345瀏覽量
62882 -
C++
+關注
關注
22文章
2114瀏覽量
73793 -
變量
+關注
關注
0文章
613瀏覽量
28446 -
關鍵字
+關注
關注
0文章
37瀏覽量
6918 -
CONST
+關注
關注
0文章
45瀏覽量
8180
發布評論請先 登錄
相關推薦
評論