Declaring a member variable as mutable is not the only way to mark it as modifiable within a constant member function. It is actually not really good practice to mark a member variable as mutable because this allows all const member functions to modify this member variable.
The compiler invisibly passes this pointer (Class X* this) to every member function, while, in the case of the constant member function, the compiler passes this pointer (const X* this).
The immutability of this pointer can be casted away using const_cast and then used for modifying any member vaiable required. Here’s an example:
void X::ConstMemberFunc() const{ X *ptr = const_cast(this); ptr->....}