C++11中推出了一種特殊的關(guān)鍵字:mutable用于修飾類(lèi)變量。 它的作用是標(biāo)注該變量一定會(huì)被修改,因此也就不是const類(lèi)型。 目的是為了使這些成員變量在被const關(guān)鍵字修飾的成員函數(shù)中使用時(shí),可以被修改。
但是我們會(huì)發(fā)現(xiàn)一個(gè)問(wèn)題,那就是不使用const修飾的變量本身就是可以修改的,那為什么還要添加mutable關(guān)鍵字呢? 這里涉及到一個(gè)用法,也是關(guān)于mutable的最常用的基本用法了。 如果不希望類(lèi)成員函數(shù)修改類(lèi)對(duì)象的狀態(tài),那么這個(gè)成員函數(shù)一般會(huì)被const修飾,修飾成員函數(shù)后就不可以更改成員變量。 如果我們需要在const成員函數(shù)中修改一些與類(lèi)對(duì)象狀態(tài)無(wú)關(guān)的成員變量,就可以用mutable來(lái)將這些成員變量修改為可變的。
直接看下面這個(gè)例子:
#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++; //此處修改是可以,因?yàn)閷?duì)m_carNum進(jìn)行了mutable限定
std::cout << m_carPrice << std::endl;
return m_carPrice ; // 無(wú)法修改該成員變量
}
int Car::getLen() const
{
return m_carLen; // 無(wú)法修改該成員變量
}
可以看到,在C++中被const修飾的成員函數(shù)無(wú)法修改類(lèi)的成員變量,成員變量在該函數(shù)中處于只讀狀態(tài)。 然而,在某些場(chǎng)合我們還是需要在const成員函數(shù)中修改成員變量的值,被修改的成員變量與類(lèi)本身并無(wú)多大關(guān)系,也許你會(huì)說(shuō),去掉函數(shù)的const關(guān)鍵字就行了。 可問(wèn)題是,我只想修改某個(gè)變量的值,其他變量希望仍然被const關(guān)鍵字保護(hù)。 這樣做相當(dāng)于在函數(shù)中給mutable變量開(kāi)了特例。
簡(jiǎn)單理解,在C++中,mutable就是為了突破成員函數(shù) const的限制,可以在const函數(shù)里面來(lái)修改被mutable修飾的成員變量。 即使在一個(gè)const函數(shù)中,被mutable修飾的變量,將永遠(yuǎn)處于可變的狀態(tài)。 這樣,既保護(hù)了其他成員變量,又能達(dá)到我們單獨(dú)修改成員變量count值的目的。
-
函數(shù)
+關(guān)注
關(guān)注
3文章
4343瀏覽量
62807 -
C++
+關(guān)注
關(guān)注
22文章
2113瀏覽量
73742 -
變量
+關(guān)注
關(guān)注
0文章
613瀏覽量
28425 -
關(guān)鍵字
+關(guān)注
關(guān)注
0文章
37瀏覽量
6912 -
CONST
+關(guān)注
關(guān)注
0文章
45瀏覽量
8178
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論