深入理解C++中的mutable关键字
深入理解C++中的mutable关键字
mutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。
在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。
我们知道,如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的。但是,有些时候,我们需要在const的函数里面修改一些跟类状态无关的数据成员,那么这个数据成员就应该被mutalbe来修饰。
下面是一个小例子:
class ClxTest { public: void Output() const; }; void ClxTest::Output() const void OutputTest(const ClxTest& lx) |
类ClxTest的成员函数Output是用来输出的,不会修改类的状态,所以被声明为const的。
函数OutputTest也是用来输出的,里面调用了对象lx的Output输出方法,为了防止在函数中调用其他成员函数修改任何成员变量,所以参数也被const修饰。
如果现在,我们要增添一个功能:计算每个对象的输出次数。如果用来计数的变量是普通的变量的话,那么在const成员函数Output里面是不能修改该变量的值的;而该变量跟对象的状态无关,所以应该为了修改该变量而去掉Output的const属性。这个时候,就该我们的mutable出场了——只要用mutalbe来修饰这个变量,所有问题就迎刃而解了。
下面是修改过的代码:
class ClxTest { public: ClxTest(); ~ClxTest(); void Output() const; private: ClxTest::ClxTest() ClxTest::~ClxTest() void ClxTest::Output() const int ClxTest::GetOutputTimes() const void OutputTest(const ClxTest& lx) |
计数器m_iTimes被mutable修饰,那么它就可以突破const的限制,在被const修饰的函数里面也能被修改。
转载于:https://blog.51cto.com/mingtangduyao/1708688
深入理解C++中的mutable关键字 相关推荐
- 深入理解C++中的mutable关键字
mutable的中文意思是"可变的,易变的",跟constant(既C++中的const)是反义词. 在C++中,mutable也是为了突破const的限制而设置的.被mutabl ...
- 深入理解Java中的final关键字
深入理解Java中的final关键字 http://www.importnew.com/7553.html Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什 ...
- 如何理解 JAVA 中的 volatile 关键字
如何理解 JAVA 中的 volatile 关键字 最近在重新梳理多线程,同步相关的知识点.关于 volatile 关键字阅读了好多博客文章,发现质量高适合小白的不多,最终找到一篇英文的非常通俗易懂. ...
- 深入理解C++中的explicit关键字
深入理解C++中的explicit关键字 kezunhai@gmail.com http://blog.csdn.net/kezunhai C++中的explicit关键字只能用于修饰只有一个参数的构 ...
- C++中的mutable关键字
mutalbe的中文意思是"可变的,易变的",跟constant(既C++中的const)是反义词. 在C++中,mutable也是为了突破const的限制而设置的.被mutabl ...
- C++ 中的mutable关键字
文章转自:https://blog.csdn.net/liyuanbhu/article/details/50365287 版权归原作者! 在C++中,mutable 是为了突破 const 的限制而 ...
- JAVA中的this怎么理解_Java中的this关键字怎么理解?
一.this关键字主要有三个应用: (1)this调用本类中的属性,也就是类中的成员变量: (2)this调用本类中的其他方法: (3)this调用本类中的其他构造方法,调用时要放在构造方法的首行. ...
- (转)深入理解Java中的final关键字
转自:http://www.importnew.com/7553.html Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方 ...
- 深入理解Java中的volatile关键字
在再有人问你Java内存模型是什么,就把这篇文章发给他中我们曾经介绍过,Java语言为了解决并发编程中存在的原子性.可见性和有序性问题,提供了一系列和并发处理相关的关键字,比如synchronized ...
最新文章
- invalid project description._[Project教程] 在Project软件中如何处理加班工时
- 【青少年编程】黄羽恒:Python
- nodejs安装node-rsa遇到的问题及解决
- docker容器的标准使用过程_跟我一起学docker(四)--容器的基本操作
- vue,一路走来(10)--生产环境
- Elasticsearch教程 IK分词器安装
- 使用Oracle验证外部数据
- 小程序FMP优化实录,大厂面试题汇总
- c#winform演练 ktv项目 点击歌单行 可以播放对应的歌曲
- 中livechart显示大数据_Kaggle 大数据竞赛中的Tricks总结
- 概率论与数理统计(二)选择题
- mysql和hdfs性能对比,Hadoop vs Spark性能对比 -数据库-火龙果软件工程
- java获取上个月15号_java获取当前上一周、上一月、上一年的时间
- Mysql索引优化和锁机制
- python xlrd读取excel慢_与xlrd相比,使用openpyxl读取Excel文件要慢很多
- 数据包络分析——二阶段网络带feedback
- 随机画五十个圆python_随的解释|随的意思|汉典“随”字的基本解释
- Salesforce: 关于Apexpages.Message类
- 常见的压力面试题及面试技巧
- 01-SNAP与snappy介绍及安装