易變的

一個說明符,可以應用於類的非靜態非引用資料成員的宣告。即使物件是 const,類的可變成員也不是 const

class C {
    int x;
    mutable int times_accessed;
  public:
    C(): x(0), times_accessed(0) {
    }
    int get_x() const {
        ++times_accessed; // ok: const member function can modify mutable data member
        return x;
    }
    void set_x(int x) {
        ++times_accessed;
        this->x = x;
    }
};

Version >= C++ 11

在 C++ 11 中新增了 mutable 的第二個含義。當它遵循 lambda 的引數列表時,它會抑制 lambda 函式呼叫運算子上的隱式 const。因此,可變 lambda 可以修改由 copy 捕獲的實體的值。有關更多詳細資訊,請參閱 mutable lambdas

std::vector<int> my_iota(int start, int count) {
    std::vector<int> result(count);
    std::generate(result.begin(), result.end(),
                  [start]() mutable { return start++; });
    return result;
}

請注意,當使用這種方式形成可變 lambda 時,mutable 不是儲存類說明符。