Ключевое слово mutable
В C++ есть много возможностей, которые редко используются. Одна из таких возможностей - использование ключевого слова mutable для указания изменяемых данных класса или структуры.
Ключевое слово mutable используется вместе с членами класса в качестве дополнительного модификатора типа :
class HashTable
{
...
private :
mutable std::map<int, string> _cache;
};
mutable показывает, что член класса является изменяемым, и его можно изменять в функциях, у которых указан модификатор const, а также у константных объектов.
Следующий пример полностью рабочий :
#include <iostream>
using std::cout;
struct foo
{
foo () : a(0) {}
void change () const { a++; }
mutable int a;
};
int main ()
{
const foo f;
f.change();
f.a = 100;
cout << f.a;
}
Это ключевое слово может использоваться в классах, где, например, есть кэш, который может потребоваться обновлять в каждой функции вне зависимости от требования константности объекта. Еще пример - при ленивой инициализации данных класса(сигнализирующий флаг будет изменяемым, mutable).