易变的
一个说明符,可以应用于类的非静态非引用数据成员的声明。即使对象是 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
不是存储类说明符。