Где применяется mutable в константном методе
1️⃣ Как кратко ответить
Ключевое слово mutable в C++ позволяет изменять члены объекта, объявленные как mutable, даже в константных методах. Это полезно, когда необходимо изменить внутреннее состояние объекта, не влияя на его логическое состояние, например, для кэширования или ведения статистики.
2️⃣ Подробное объяснение темы
В C++ константные методы (const методы) предназначены для того, чтобы гарантировать, что они не изменяют состояние объекта, для которого они вызываются. Это достигается путем добавления ключевого слова const в конец объявления метода. Однако, иногда возникает необходимость изменить некоторые внутренние данные объекта, которые не влияют на его логическое состояние. В таких случаях используется ключевое слово mutable.
Зачем это нужно
mutable позволяет изменять определенные члены объекта даже в константных методах. Это полезно в ситуациях, когда необходимо изменить внутреннее состояние объекта, которое не должно быть видимо снаружи и не влияет на его логическое состояние. Примеры таких ситуаций включают:
- Кэширование результатов: Если метод выполняет сложные вычисления, результат которых можно сохранить для последующего использования,
mutableпозволяет сохранить этот результат в кэше. - Ведение статистики: Например, подсчет количества вызовов метода или времени выполнения.
Как это работает
Ключевое слово mutable применяется к членам данных класса. Эти члены могут быть изменены в методах, объявленных как const.
Пример кода
#include <iostream>
class Example {
public:
Example() : call_count(0) {}
// Константный метод, который не должен изменять состояние объекта
void constMethod() const {
// Увеличиваем счетчик вызовов, несмотря на то, что метод константный
++call_count;
std::cout << "constMethod called " << call_count << " times\n";
}
private:
// Член данных, который может изменяться в константных методах
mutable int call_count;
};
int main() {
Example example;
example.constMethod(); // Вывод: constMethod called 1 times
example.constMethod(); // Вывод: constMethod called 2 times
return 0;
}
Объяснение кода
class Example: Определяет классExampleс одним приватным членом данныхcall_count.mutable int call_count: Объявляетcall_countкакmutable, что позволяет изменять его в константных методах.void constMethod() const: Определяет константный методconstMethod, который не должен изменять состояние объекта, но может изменятьcall_countблагодаряmutable.++call_count: Увеличиваетcall_countпри каждом вызовеconstMethod, демонстрируя возможность измененияmutableчлена в константном методе.main: Создает объектexampleи вызываетconstMethodдважды, показывая, чтоcall_countувеличивается, несмотря на то, что метод константный.
Использование mutable позволяет разработчикам сохранять логическую неизменность объекта, при этом изменяя его физическое состояние для внутренних нужд, таких как кэширование или ведение статистики.
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться