Один из лучших примеров, где мы используем mutable, - это глубокая копия. в конструкторе копирования мы отправляем const &obj
в качестве аргумента. Таким образом, новый созданный объект будет иметь постоянный тип. Если мы хотим изменить (в основном мы не будем изменять, в редких случаях мы можем изменить) элементы этого вновь созданного объекта const, нам нужно объявить его как mutable
.
mutable
класс хранения может использоваться только для не статических неконстантных данных класса. Изменяемый член данных класса может быть изменен, даже если он является частью объекта, который объявлен как const.
class Test
{
public:
Test(): x(1), y(1) {};
mutable int x;
int y;
};
int main()
{
const Test object;
object.x = 123;
//object.y = 123;
/*
* The above line if uncommented, will create compilation error.
*/
cout<< "X:"<< object.x << ", Y:" << object.y;
return 0;
}
Output:-
X:123, Y:1
В приведенном выше примере мы можем изменить значение переменной-члена x
, хотя она является частью объекта, который объявлен как const. Это потому, что переменная x
объявлена как изменяемая. Но если вы попытаетесь изменить значение переменной-члена y
, компилятор выдаст ошибку.