Вы можете использовать mutable для переменных, которые могут быть изменены в экземплярах объекта const. Это называется логической константностью (в отличие от битовой константности), поскольку объект не изменился с точки зрения пользователя.
Например, вы можете кэшировать длину строки для увеличения производительности.
class MyString
{
public:
...
const size_t getLength() const
{
if(!m_isLenghtCached)
{
m_length = doGetLength();
m_isLengthCached = true;
}
return m_length;
}
private:
sizet_t doGetLength() const { /*...*/ }
mutable size_t m_length;
mutable bool m_isLengthCached;
};