在C++中,mutable 是为了突破 const 的限制而设置的。可以用来修饰一个类的成员变量。被 mutable 修饰的变量,将永远处于可变的状态,即使是 const 函数中也可以改变这个变量的值。
在const对象中,我们不希望修改对象的内容。但在某些类里面我们必须通过修改某些变量来做类似遍历的操作,但这个时候必会与const冲突。这是我们可以在变量前面加mutable,以此告诉编译器修改这个变量不会破坏对象的常量性。
也就是说:(1) mutable 只能用来修饰某个类的成员变量
(2) 加mutable修饰的主要目的就是,保证修饰的变量可以在const成员函数加以修改。
(3) mutable的本意是要让那些不可变的成员变量成为可变的。区别与普通变量,普通 变量本来就是能任意改变的
#include <iostream>
class Person {
public:
Person();
~Person();
int getAge() const; /*调用方法*/
int getCallingTimes() const; /*获取上面的getAge()方法被调用了多少次*/
private:
int age;
char *name;
float score;
mutable int m_nums; /*用于统计次数*/
};
Person::Person()
{
m_nums = 0;
}
Person::~Person(){}
int Person::getAge() const
{
std::cout << "Calling the method" << std::endl;
m_nums++; //此处修改是可以,因为对m_nums进行了mutable限定
// age = 4; 仍然无法修改该成员变量
return age;
}
int Person::getCallingTimes()const
{
return m_nums;
}
int main()
{
Person *person = new Person();
for (int i = 0; i < 10; i++) {
person->getAge();
}
std::cout << "getAge()方法被调用了" << person->getCallingTimes() << "次" << std::endl;
delete person;
getchar();
return 0;
}