1. 程式人生 > >如何修改const類中的變數(或在const函式中修改變數)

如何修改const類中的變數(或在const函式中修改變數)

有時候,我們需要在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之後的又一噁心發明,用一個噁心解決另一個噁心。

mutable修飾的變數,不僅可以在const函式中修改,也可以在無視const類的約速,如下程式碼是可以執行的: const Entity e; e.reference = 1; 我在半年前知道了mutable這個用法,但是當我這兩天需要再用這個屬性時,我忘記了。