深入了解C++中间mutablekeyword
2015-10-18 11:47
225 查看
深入理解C++中的mutablekeyword
kezunhai@gmail.com
http://blog.csdn.net/kezunhai
keywordmutable是C++中一个不经常使用的keyword。它的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。在C++中。mutable也是为了突破const的限制而设置的。被mutable修饰的变量。将永远处于可变的状态,即使在一个const函数中。
mutable仅仅能用于类的非静态和很量数据成员。我们知道一个对象的状态由该对象的非静态数据成员决定,所以随着数据成员的改变,对像的状态也会随之发生变化。
假设一个类的成员函数被声明为const类型,表示该函数不会改变对象的状态,也就是该函数不会改动类的非静态数据成员.可是有些时候须要在该类函数中对类的数据成员进行赋值。这个时候mutablekeyword就派上用场了。
举个样例,如:
总结:mutablekeyword可以在保持常量对象中大部分数据成员仍然仅仅是“仅仅读”的情况下。实现个别数据成员的改动,使用mutablekeyword,须要注意下面几点:
(1)mutablekeyword仅仅能作用于类的非静态和很量数据成员。
(2)mutablekeyword提示编译器该变量能够被雷的const函数改动。
(3)在一个类中,用mutable修饰的变量仅仅能是少数,或者根本不使用mutable。
參考资料:
1、C++高级进阶。
作者:kezunhai出处:http://blog.csdn.net/kezunhai欢迎转载或分享,但一定要注明文章来源
kezunhai@gmail.com
http://blog.csdn.net/kezunhai
keywordmutable是C++中一个不经常使用的keyword。它的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。在C++中。mutable也是为了突破const的限制而设置的。被mutable修饰的变量。将永远处于可变的状态,即使在一个const函数中。
mutable仅仅能用于类的非静态和很量数据成员。我们知道一个对象的状态由该对象的非静态数据成员决定,所以随着数据成员的改变,对像的状态也会随之发生变化。
假设一个类的成员函数被声明为const类型,表示该函数不会改变对象的状态,也就是该函数不会改动类的非静态数据成员.可是有些时候须要在该类函数中对类的数据成员进行赋值。这个时候mutablekeyword就派上用场了。
举个样例,如:
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; };则代码正常编译。
总结:mutablekeyword可以在保持常量对象中大部分数据成员仍然仅仅是“仅仅读”的情况下。实现个别数据成员的改动,使用mutablekeyword,须要注意下面几点:
(1)mutablekeyword仅仅能作用于类的非静态和很量数据成员。
(2)mutablekeyword提示编译器该变量能够被雷的const函数改动。
(3)在一个类中,用mutable修饰的变量仅仅能是少数,或者根本不使用mutable。
參考资料:
1、C++高级进阶。
作者:kezunhai出处:http://blog.csdn.net/kezunhai欢迎转载或分享,但一定要注明文章来源
相关文章推荐
- 【黑马训练营】IOS C语言函数
- C++操作符的优先级
- [C++基金会]位计算 游戏开发中的应用
- 剑指offer第十九题【顺时针打印矩阵】c++实现
- C++实现二叉树及其线索化和遍历
- c语言和c++的“&”的语言
- mfc c++常用函数
- 【黑马训练营】IOS C语言循环语句
- 用C++实现STL容器stack
- C++设计模式--享元模式【转载】
- C/C++经典图书推荐
- Merge Two Sorted Lists(C++)
- C语言获取文件大小相关操作
- [黑马训练营]IOS C语言分支语句
- c字符串的处理
- C++堆和栈的比较
- [黑马训练营]IOS C语言运算符
- C语言名题精选百则:所有子集,字典子集,Gray子集
- zerglurker的c语言教程006——第一功能
- 实现一个函数,判断一个数是不是素数。