如何修改const類中的變數(或在const函式中修改變數)
阿新 • • 發佈:2019-01-30
有時候,我們需要在const函式中修改一些變數,比如類的共享標記、共享計數器,如下程式碼: class Entity { private: int referenceCounter; public: void ref() { referenceCounter++; } ... }; 我們可能會在很多函式中呼叫Entity::ref()來對這個類增加引用,因為這個函式是如此基礎,導致可能有一些被const修飾的函式也可能呼叫這個方法,那麼,我們往往需要將ref()也加上const修飾以方便呼叫。如下: public: void ref() const { ... } 這時我們就會面臨一個情況,如何在這個const的函式中修改值? 一種眾所周知的方法是: (Entity *this)->referenceCounter++; 另外,還有一個比較罕見的用法,那就是修改referenceCounter的定義,通過mutable進行修飾: class Entity { private: mutable int referenceCounter; public: void ref() const { referenceCounter++; } ... }; mutable的含義在這裡表示這個變數可以在const中被修改,它overwrite了const修飾。 不可否認,這是C++一個繼const之後的又一噁心發明,用一個噁心解決另一個噁心。