零、文章来由
打算将基础知识在看书的同时系统的整理一下,方便大家也方便自己。整理的知识尽量参照书本知识,比网上获取的资料有更高的可信度。
一、作用
mutable 用来解决常函数中不能修改对象的数据成员的问题。
如果在一些情况下,希望在常函数中仍然可以修改某个成员变量的值,就在该变量前加上mutable。能在保证常量对象大部分数据成员仍然“只读”情况下,实现对个别成员的修改。
#include <iostream>
#include <string>
using namespace std;
class Student
{
string Name; //默认为private
int times_of_getname;
public:
Student(char *name)
:Name(name),times_of_getname(0) {
}
string get_name() {
times_of_getname++;
return Name;
}
void PrintTimes() const {
cout<<times_of_getname<<endl;
}
};
int main()
{
const Student s("Bill王");
cout<<s.get_name()<<endl;
cout<<s.get_name()<<endl;
s.PrintTimes();
return 0;
}
如上程序会报错,因为常量对象s(信息不能被修改的学生实体),调用 非const 函数 get_name(),但是如果将 get_name() 改为 const,有无法修改 times_of_getname。
但如果修改为:
mutable int times_of_getname;
string get_name() const{
}
即可
二、使用注意事项
使用关键字mutable要注意以下几点:
(1)mutable 只用于类的非静态和非常量数据成员。
(2)mutable 关键字提示编译器该变量可以被类的const函数修改。
(3)一个类中,用mutable修饰的变量只能是少数,或者根本不使用,大量使用代表程序设计上的缺陷。
参考资料
[1]陈刚.C++高级进阶教程[M].武汉:武汉大学出版社,2008.