mutable的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。

  在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。

  我们知道,如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的。但是,有些时候,我们需要在const的函数里面修改一些跟类状态无关的数据成员,那么这个数据成员就应该被mutalbe来修饰。

  下面是一个小例子:

class ClxTest

{

 public:

  void Output() const;

};

void ClxTest::Output() const

{

 cout << "Output for test!" << endl;

}

void OutputTest(const ClxTest& lx)

{

 lx.Output();

}

  类ClxTest的成员函数Output是用来输出的,不会修改类的状态,所以被声明为const的。

  函数OutputTest也是用来输出的,里面调用了对象lx的Output输出方法,为了防止在函数中调用其他成员函数修改任何成员变量,所以参数也被const修饰。

  如果现在,我们要增添一个功能:计算每个对象的输出次数。如果用来计数的变量是普通的变量的话,那么在const成员函数Output里面是不能修改该变量的值的;而该变量跟对象的状态无关,所以应该为了修改该变量而去掉Output的const属性。这个时候,就该我们的mutable出场了——只要用mutalbe来修饰这个变量,所有问题就迎刃而解了。

  下面是修改过的代码:

class ClxTest

{

 public:

  ClxTest();

  ~ClxTest();

  void Output() const;

  int GetOutputTimes() const;

 private:

  mutable int m_iTimes;

};

ClxTest::ClxTest()

{

 m_iTimes = 0;

}

ClxTest::~ClxTest()

{}

void ClxTest::Output() const

{

 cout << "Output for test!" << endl;

 m_iTimes++;

}

int ClxTest::GetOutputTimes() const

{

 return m_iTimes;

}

void OutputTest(const ClxTest& lx)

{

 cout << lx.GetOutputTimes() << endl;

 lx.Output();

 cout << lx.GetOutputTimes() << endl;

}

  计数器m_iTimes被mutable修饰,那么它就可以突破const的限制,在被const修饰的函数里面也能被修改。

深入理解C++中的mutable关键字相关推荐

  1. 深入理解C++中的mutable关键字 ​

    深入理解C++中的mutable关键字 mutalbe的中文意思是"可变的,易变的",跟constant(既C++中的const)是反义词. 在C++中,mutable也是为了突破 ...

  2. 深入理解Java中的final关键字

    深入理解Java中的final关键字 http://www.importnew.com/7553.html Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什 ...

  3. 如何理解 JAVA 中的 volatile 关键字

    如何理解 JAVA 中的 volatile 关键字 最近在重新梳理多线程,同步相关的知识点.关于 volatile 关键字阅读了好多博客文章,发现质量高适合小白的不多,最终找到一篇英文的非常通俗易懂. ...

  4. 深入理解C++中的explicit关键字

    深入理解C++中的explicit关键字 kezunhai@gmail.com http://blog.csdn.net/kezunhai C++中的explicit关键字只能用于修饰只有一个参数的构 ...

  5. C++中的mutable关键字

    mutalbe的中文意思是"可变的,易变的",跟constant(既C++中的const)是反义词. 在C++中,mutable也是为了突破const的限制而设置的.被mutabl ...

  6. C++ 中的mutable关键字

    文章转自:https://blog.csdn.net/liyuanbhu/article/details/50365287 版权归原作者! 在C++中,mutable 是为了突破 const 的限制而 ...

  7. JAVA中的this怎么理解_Java中的this关键字怎么理解?

    一.this关键字主要有三个应用: (1)this调用本类中的属性,也就是类中的成员变量: (2)this调用本类中的其他方法: (3)this调用本类中的其他构造方法,调用时要放在构造方法的首行. ...

  8. (转)深入理解Java中的final关键字

    转自:http://www.importnew.com/7553.html Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方 ...

  9. 深入理解Java中的volatile关键字

    在再有人问你Java内存模型是什么,就把这篇文章发给他中我们曾经介绍过,Java语言为了解决并发编程中存在的原子性.可见性和有序性问题,提供了一系列和并发处理相关的关键字,比如synchronized ...

最新文章

  1. pat1094. The Largest Generation (25)
  2. git删除远程分支文件
  3. Mac安装MySQL数据库
  4. 呆萌的图模型学习——图基本信息 Networkx基本操作(二)
  5. 奇偶个数 中国大学生mooc 翁恺 C语言
  6. @ModelAttribute
  7. vue router 懒加载实现
  8. 线程池创建线程数量讨论
  9. 利用计算机进行频数分布表制作,实验三 利用Excel软件作频数分布表和统计图表...
  10. Windows右键菜单设置与应用技巧(转)
  11. 灵棋排盘:一款让人感到惊喜的命理排盘工具
  12. html表白网页制作_表白时刻_表白网页在线制作_创意表白_表白神器
  13. 2022年最新软件测试工程师简历经验总结:软件测试工程师简历项目经验怎么写?(含真实简历模板)
  14. war3第一视角集合 UD篇
  15. Win10下安装Ubuntu20.04双系统,看这一篇就够了
  16. [代码记录生活]Name evn is not bound in this Context 解决方案
  17. cmd命令下修复硬盘/U盘
  18. 深圳关内主要旅游景点地址和公交路线
  19. 超标量处理器设计 姚永斌 第9章 指令执行 摘录
  20. 时间转秒函数c语言,c语言函数mktime()如何将时间转换成经过的秒数实例源码

热门文章

  1. Java枚举:小小enum,优雅而干净
  2. consul 命令行参数
  3. 使用WatchService监控文件变化
  4. Python 实现杨辉三角
  5. 【Linux - mysql】怎么修改数据库编码
  6. lastpass安卓最新版_LastPass
  7. 计算营业额python_用python教你计算定投能获得多少收益
  8. easyui datagrid 多表头数据错位_表格数据检索(二)
  9. 机房精密空调压缩机故障处理实例
  10. for根据ID去重_Vue中v-for配合key使用的重要性