天天看點

C++ mutable關鍵字

引言:對于類的成員函數來說,如果它不修改類的狀态,一般将其聲明為const函數. 但是如果我們想在類的const成員函數中修改與類的狀态無關的成員變量,那麼該怎麼做呢?答案是使用mutable關鍵字。

mutable關鍵字是為了突破const關鍵字的限制而引入的,修飾一個成員變量,表示這個成員變量在const函數中也是可以被修改的。
mutable關鍵字隻能修飾類的非靜态和非常量的成員變量,即不能與static和const連用。
           

示例如下:

class Test
{
public:
    Test() : mValue(0)
    {
    }
    inline void Output() const //僅用于輸出并不會修改類的狀态,但會修改非狀态成員變量.
    {
        mValue++;
        cout << "Output the object: " << this << endl;
    }
    inline void GetOutputTimes() const { return mValue; }

private:
    mutable int mValue;//表示類對象輸出的次數.
};
           

在以上代碼段中,const類型的成員函數Output()會修改成員變量mValue。如果不将mValue聲明為mutable類型是不行的。

int main()
{
    Test* pObj = new Test();
    pObj->Output();
    pObj->Output();
    cout << pObj->GetOutputTimes() << endl;//輸出2.
    return 0;
}
           

繼續閱讀