const修饰变量表示改变量内容不可修改,在类中,const还可以修饰成员函数,修饰成员函数后就不可以更改成员变量了。

可以看出,this指针是const*const类型,既不可以修改其内容,也不能修改其指向。
想一下,有什么办法可以更改其const属性吗?自然而然会想到const_cast:

 int getAge()const{Studnt* pStu = const_cast<Studnt*>(this);pStu->age = 1000;return age;}

通过这种方式可以修改成员变量的值。当然了C++11还有更简单的办法即mutable关键字:
mutalbe的意思是“可变”,和C++中的const相反,在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。

class A
{public:A(){this->number = 0;}
private:mutable int number;
public:int getNum()const{this->number++;return this->number;}
};
int main()
{A a;cout << a.getNum() << endl;cout << a.getNum() << endl;return 0;
}


简单理解,mutable就是为了突破成员函数 const的限制,可以在const函数里面来修改被mutable修饰的成员变量。

const和mutable关键字相关推荐

  1. 【C++入门】const和mutable关键字、常函数介绍

    1.常函数介绍 1.1.什么是常函数 (1)常函数的定义:类的成员函数对类中任何成员不作修改而只能作访问的函数:简单来说,就是调用类的成员函数不会对类做任何修改: (2)常函数的实现:常函数是依靠co ...

  2. 为什么用const保护了成员变量,还要再定义一个mutable关键字来突破const的封锁线?

    为什么用const保护了成员变量,还要再定义一个mutable关键字来突破const的封锁线? 保护类的成员变量不在成员函数中被修改,是为了保证模型的逻辑正确,通过用const关键字来避免在函数中错误 ...

  3. 【C/C++ 关键字 存储类说明符】C/C++ 的mutable 关键字 忽略对该数据成员的常量性检查在const函数中修改变量值

    这里写目录标题 1. 引言 1.1 mutable关键字的简介 2. mutable关键字的设计意图 (The Design Intent of the mutable Keyword) 2.1 为什 ...

  4. const、volatile、mutable关键字

     const关键字 变量宏方面: const 修饰变量:常量非指针类型,非指针常量类型并没有什么区别. const修饰指针:常量指针:是指针不过指向的是常量可以进行p++操作不能进行*p操作:指针 ...

  5. 除了允许变量被const函数修改之外,'mutable'关键字是否有任何其他用途?

    前段时间我遇到了一些用<code>mutable关键字标记类的成员变量的代码. 据我所知,它只是允许你修改const方法中的变量: class Foo { private: mutable ...

  6. C++基本功:全面掌握const、volatile和mutable关键字

    C++ 程式设计过程中 ,const 的使用可以频度是非常高的 . 它在保证程式安全方面起到了不可估量的作用 . 用一句话来表达最确切不过了:"小兵立大功" .    有了 con ...

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

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

  8. C++中的mutable关键字

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

  9. C++笔记-const与mutable、static_cast与reinterpret_cast

    目录 const与mutable static_cast与reinterpret_cast const与mutable 如下代码: #include <iostream> using na ...

最新文章

  1. Codeforces 868F Yet Another Minimization Problem 决策单调性 (看题解)
  2. 关于vue2.0组件通信
  3. 面试官:线程顺序执行,这么多答案你都答不上来?
  4. 一图读懂《北京市数据中心统筹发展实施方案(2021-2023年)》
  5. python(numpy,pandas5)——numpy中copy 和 deep copy
  6. 为什么不能用python_为什么我不能用python加入这个线程?
  7. 牛客网数据开发题库_数据库刷题—牛客网(21-30)
  8. 一天学一个模式_第一天:策略模式
  9. 基于点云的三维重建_香港科技大学王煜教授:深度学习在物体三维重建中的应用...
  10. 烘烤店LOGO在线设计制作教程
  11. Android 进阶第二篇——性能优化
  12. 丹麦为NSA开绿灯 通过通信中心监控欧洲政客
  13. 【出版直播】博客园征途系列,《设计模式——基于C#的工程化实现及扩展》定价修改...
  14. php 有request,php实现httpRequest的方法
  15. 解决织梦CMS友情链接的字数个数限制
  16. 李炎恢PHP高端培训视频教程
  17. 十进制转格雷码 c语言,C语言输出格雷码
  18. Unity笔记-05
  19. myeclipse设置黑色主题
  20. exynos4412驱动程序教程.0

热门文章

  1. 最新版---yy语音8.0-YYSetup-8.57.0.1-zh-CN.exe
  2. SGNW House 豪宅照明设计详解
  3. 第十六节、轻松学Java_输入输出流
  4. owl文件导入Neo4j
  5. 安装或更新 Android Studio
  6. 16进制文本转二进制文件
  7. iPhone 6大陆预订量突破2000万部
  8. 神经网络激活函数sigmoid relu tanh 为什么sigmoid 容易梯度消失
  9. linux 学习 文件与目录
  10. 六招教你辨别LED屏的好坏