C++11中推出了一種特殊的關(guān)鍵字:mutable用于修飾類變量。 它的作用是標注該變量一定會被修改,因此也就不是const類型。 目的是為了使這些成員變量在被const關(guān)鍵字修飾的成員函數(shù)中使用時,可以被修改。
但是我們會發(fā)現(xiàn)一個問題,那就是不使用const修飾的變量本身就是可以修改的,那為什么還要添加mutable關(guān)鍵字呢? 這里涉及到一個用法,也是關(guān)于mutable的最常用的基本用法了。 如果不希望類成員函數(shù)修改類對象的狀態(tài),那么這個成員函數(shù)一般會被const修飾,修飾成員函數(shù)后就不可以更改成員變量。 如果我們需要在const成員函數(shù)中修改一些與類對象狀態(tài)無關(guān)的成員變量,就可以用mutable來將這些成員變量修改為可變的。
直接看下面這個例子:
#include
class Car
{
public:
Car();
~Car();
int getPrice() const; /*調(diào)用方法 const成員函數(shù)*/
int getLen() const; /*調(diào)用方法 const成員函數(shù)*/
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修飾的成員函數(shù)無法修改類的成員變量,成員變量在該函數(shù)中處于只讀狀態(tài)。 然而,在某些場合我們還是需要在const成員函數(shù)中修改成員變量的值,被修改的成員變量與類本身并無多大關(guān)系,也許你會說,去掉函數(shù)的const關(guān)鍵字就行了。 可問題是,我只想修改某個變量的值,其他變量希望仍然被const關(guān)鍵字保護。 這樣做相當于在函數(shù)中給mutable變量開了特例。
簡單理解,在C++中,mutable就是為了突破成員函數(shù) const的限制,可以在const函數(shù)里面來修改被mutable修飾的成員變量。 即使在一個const函數(shù)中,被mutable修飾的變量,將永遠處于可變的狀態(tài)。 這樣,既保護了其他成員變量,又能達到我們單獨修改成員變量count值的目的。
-
函數(shù)
+關(guān)注
關(guān)注
3文章
4277瀏覽量
62323 -
C++
+關(guān)注
關(guān)注
21文章
2100瀏覽量
73453 -
變量
+關(guān)注
關(guān)注
0文章
613瀏覽量
28306 -
關(guān)鍵字
+關(guān)注
關(guān)注
0文章
37瀏覽量
6889 -
CONST
+關(guān)注
關(guān)注
0文章
43瀏覽量
8142
發(fā)布評論請先 登錄
相關(guān)推薦
評論