Назад к вопросам
Middle
76
questionbank

Для чего используется ключевое слово mutable в C++?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Ключевое слово mutable в C++ используется для разрешения изменения члена данных константного объекта. Обычно, если объект объявлен как const, ни один из его нестатических членов данных не может быть изменен. Однако, если член данных помечен как mutable, его можно изменить даже в константном методе или через константную ссылку/указатель на объект.

Это полезно для членов данных, которые не влияют на логическую константность объекта, но могут изменяться внутренне, например, для кеширования результатов вычислений или управления ресурсами.

Пример:

#include <iostream>

class MyClass {
public:
    // Константная функция-член
    void doSomething() const {
        // Можно изменить mutable_value, несмотря на то, что doSomething() константная
        mutable_value++;
        std::cout << "mutable_value: " << mutable_value << std::endl;
    }

private:
    // mutable_value может быть изменен даже в константных методах
    mutable int mutable_value = 0;
    int normal_value = 0; // не может быть изменен в константных методах
};

int main() {
    const MyClass obj;
    obj.doSomething(); // Вызывает константную функцию

    // obj.normal_value = 10; // Ошибка компиляции: попытка изменить не-mutable член константного объекта

    return 0;
}

В этом примере, mutable_value в классе MyClass объявлен как mutable. Метод doSomething является константным (const). Несмотря на это, внутри doSomething мы можем увеличить mutable_value. Попытка изменить normal_value в константном контексте приведет к ошибке компиляции.