在C++中,由const修饰的成员函数的函数体内部,是不能够对成员变量进行修改的。这个特性被用来保证某些成员函数在实现过程中,避免由于程序员大意而对数据进行了错误的修改;同时也说明此成员函数是非修改性的。如只需要返回成员变量的成员函数就被声明为const类型(const的位置在函数定义参数列表之后)
推广开来,在const成员函数中也不能够调用非const的成员函数。这是因为非const成员函数可能会改变成员变量的值,这与const成员函数的定义相违背。
但是在某些情况下,需要在const函数中改变成员变量。这就需要把成员变量设置成mutable类型。如class C{public:void func(const int& p) const{i = p;}private:mutable int i;};如果变量i不声明为mutable类型,则编译不会通过。
如果成员变量是一个类类型或者结构类型,而在const函数中调用这些变量的成员函数,除了用mutable声明外,还可以用一种变通的方法:class D{public:void op(){}}class C{public:void func(const int& p, D& d) const{i = p;
d.op();}private:mutable int i;D cd;};然后在调用时,参数D& d以*this作为输入,也可以达到调用非const函数的作用。
P.S 最近阅读相关的文章,又学到了一种方法,能够使得在const成员函数中调用非const成员函数。就是使用const_cast<运算符。它能够使得const去掉const的属性,使得violate属性去掉violate属性。上面的例子就可以写成。

最新文章

  1. [LeetCode] Find Leaves of Binary Tree 找二叉树的叶节点
  2. HP ALM 使用经验
  3. sql server 利用发布订阅方式实现数据库同步问题
  4. USACO 08-Nov( 最小生成树)
  5. 使用 jQuery Mobile 与 HTML5 开发 Web App —— HTML5 离线缓存
  6. Treap树的基础知识
  7. FireFox插件
  8. ubuntu14.04 中国源
  9. js私有共有成员
  10. 日志基本概念/rSyslog
  11. 阿里云开放服务oss的api
  12. 通过在shell脚本中用scp或rsync实现远程同步文件
  13. Android studio之更改快捷键及自动导包
  14. IFE-20 笔记
  15. BZOJ 1834: [ZJOI2010]network 网络扩容(网络流+费用流)
  16. 浅谈大数据和hadoop家族
  17. 2018-05-09 5分钟入门CTS-尝鲜中文版TypeScript
  18. linux学习笔记-目录相关知识
  19. VSFTP 服务器配置
  20. SqlServer添加触发器死锁的原因

热门文章

  1. php msql 表单
  2. JavaScript 将当地时间转换成其它时区
  3. luogu1725 琪露诺
  4. ios开发讲解之anchorPoint和position详解
  5. Selenium WebDriver- 操作 IFrame 中的页面元素
  6. day05_05 for循环、break语句
  7. Cookie和Session的作用和工作原理
  8. [转]linux多命令的顺序执行
  9. [译]PYTHON FUNCTIONS - MAP, FILTER, AND REDUCE
  10. 【mysql 优化 5】左连接和右连接优化