非靜態類成員修飾符

此上下文中的 mutable 修飾符用於指示可以修改 const 物件的資料欄位而不影響物件的外部可見狀態。

如果你正在考慮快取昂貴計算的結果,則應該使用此關鍵字。

如果你有一個鎖定(例如,std::unique_lock)資料欄位,它在 const 方法中被鎖定和解鎖,那麼這個關鍵字也是你可以使用的。

你不應該使用此關鍵字來破壞物件的邏輯常量。

快取示例:

class pi_calculator {
 public:
     double get_pi() const {
         if (pi_calculated) {
             return pi;
         } else {
             double new_pi = 0;
             for (int i = 0; i < 1000000000; ++i) {
                 // some calculation to refine new_pi
             }
             // note: if pi and pi_calculated were not mutable, we would get an error from a compiler
             // because in a const method we can not change a non-mutable field
             pi = new_pi;
             pi_calculated = true;
             return pi;
         }
     }
 private:
     mutable bool pi_calculated = false;
     mutable double pi = 0;
};