易變的
一個說明符,可以應用於類的非靜態非引用資料成員的宣告。即使物件是 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
不是儲存類說明符。