Думайте об этом так.Это совершенно верно:
void Type::print_self () const {
std::cout << *this << std::endl;
}
Вы не изменяете сам объект, поэтому использование квалификатора const
совершенно правильно.Этот метод модифицирует std::cout
, но это не считается до const
ness Type::print_self()
.
Тем не менее, mutable Cache
выглядит мне противоречием в терминах, если толькоэтот элемент Cache
используется только для локального хранения в Render
.Если вы действительно используете его в качестве кеша, кажется немного сомнительным квалифицировать этот элемент как mutable
.Используйте его как кеш (например, между вызовами Render
, а не внутри вызова Render
), и вы обманули и компилятор, и пользователя класса.
Редактировать
Согласно комментариям, сделанным ФП, метод Render
действительно является графическим эквивалентом print_self()
.«Реальное» состояние объекта (предположительно, не показано для построения минимального рабочего примера) предположительно не изменяется при рендеринге.Обозначение Render
как const
является правильным решением.Если причина существования элемента данных Cache
заключается в том, что он служит в качестве ускорения, позволяющего избежать затрат на его создание и уничтожение при каждом вызове Render
, то нет ничего плохого в том, чтобы квалифицировать этот элемент Cache
как mutable
(чтонеобходимо, чтобы Render
оставалось const
).