深入理解C++中的mutable关键字
来源:互联网 发布:潜入朝鲜知乎 编辑:程序博客网 时间:2024/06/02 05:16
深入理解C++中的mutable关键字
kezunhai@gmail.com
http://blog.csdn.net/kezunhai
关键字mutable是C++中一个不常用的关键字,它的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。
mutable只能用于类的非静态和非常量数据成员。我们知道一个对象的状态由该对象的非静态数据成员决定,所以随着数据成员的改变,对像的状态也会随之发生变化。如果一个类的成员函数被声明为const类型,表示该函数不会改变对象的状态,也就是该函数不会修改类的非静态数据成员.但是有些时候需要在该类函数中对类的数据成员进行赋值,这个时候mutable关键字就派上用场了。
举个例子,如:
class Student{public:Student(){}~Student(){}Student( int _age):age(_age){}public:int getAge() const{age++; // 在const函数里试图修改,编译报错return age;}private:string name;int age;};上面代码在编译时报:“error C2166: 左值指定 const 对象”错误。在上面的例子中,const类型的getAge()函数中改变了类的非静态数据成员age。因此,这个时候需要使用mutable来修饰一下要在const成员函数中改变的非静态数据成员,将上述代码改为:
class Student{public:Student(){}~Student(){}Student( int _age):age(_age){}public:int getAge() const{age++; // 在const函数里试图修改,编译报错return age;}private:string name;mutable int age;};则代码正常编译。
总结:mutable关键字能够在保持常量对象中大部分数据成员仍然只是“只读”的情况下,实现个别数据成员的修改,使用mutable关键字,需要注意以下几点:
(1)mutable关键字只能作用于类的非静态和非常量数据成员。
(2)mutable关键字提示编译器该变量可以被雷的const函数修改。
(3)在一个类中,用mutable修饰的变量只能是少数,或者根本不使用mutable。
参考资料:
1、C++高级进阶。
作者:kezunhai出处:http://blog.csdn.net/kezunhai欢迎转载或分享,但请务必声明文章出处
0 0
- 深入理解C++中的mutable关键字
- 深入理解C++中的mutable关键字
- 深入理解C++中的mutable关键字
- 深入理解C++中的mutable关键字
- 《转》深入理解C++中的mutable关键字
- 深入理解C++中的mutable关键字
- 深入理解C++中的mutable关键字
- 深入理解C++中的mutable关键字
- 深入理解C++中的mutable关键字
- 深入理解C++中的mutable关键字
- 深入理解C++中的mutable关键字
- 深入理解C++中的mutable关键字
- 深入理解C++中的mutable关键字
- 深入理解C++中的mutable关键字
- 深入理解C++中的mutable关键字
- 深入理解C++中的mutable关键字
- 深入理解C++中的mutable关键字
- 深入理解C++中的mutable关键字
- hdu1358 kmp
- JQuery防止退格键网页后退
- oracle中实现break和continue
- 随机生成一个三维数组,编程求深度的平均值,保存在一个二维数组中。
- hdoj1040 As Easy As A+B
- 深入理解C++中的mutable关键字
- 找出一个二维数组中的“鞍点”,即该位置上的元素在该行中最大,在该列中最小(也可能没鞍点),打印出有关信息。
- 15.10 Spiral Matrix
- A Simple Math Problem 矩阵乘法
- 过河卒
- hdu 1496 Equations
- tomcat 关联源码
- 超级楼梯(2041)
- 对数组元素随机赋值,冒泡排序,输出数组