代码编译运行环境:VS2017+Win32+Debug


mutalbe 的中文意思是“可变的,易变的”,是constant(即C++中的const)的反义词。在C++中,mutable也是为了突破const的限制而设置的,被mutable修饰的变量将永远处于可变的状态。

mutable的作用有两点:
(1)保持常量对象中大部分数据成员仍然是“只读”的情况下,实现对个别数据成员的修改;
(2)使类的const函数可以修改对象的mutable数据成员。

使用mutable的注意事项:
(1)mutable只能作用于类的非静态和非常量数据成员。
(2)在一个类中,应尽量或者不用mutable,大量使用mutable表示程序设计存在缺陷。

示例代码如下:

#include <iostream>
using namespace std;//mutable int test;//编译出错class Student
{string name;mutable int getNum;//mutable const int test;    //编译出错//mutable static int static1;//编译出错public:Student(char* name){this->name=name;getNum=0;}string getName() const{++getNum;return name;}void pintTimes() const{cout<<getNum<<endl;}
};int main(int argc, char* argv[])
{const Student s("张三");cout<<s.getName().c_str()<<endl;s.pintTimes();return 0;
}

程序输出结果:

张三
1

mutable不能修饰const数据成员容易理解,因为mutable与const本是反义,同时修饰不是自相矛盾吗。mutable不能修饰static数据成员,因为static数据成员存储在Data段或BSS段,属于类,不属于类对象,那么常对象和常函数可以对其任意地修改,所以类的static数据成员根本不需要mutable的修饰,但对于常对象的数据成员则不可以被修改,若想修改,则需要mutable的修饰。示例代码如下:

#include <iostream>
using namespace std;class Student
{string name;public:static int test1;void modify() const{test1=15;cout<<test1<<endl;}
};int Student::test1;//申明test1并按照编译器默认的值进行初始化
int main(int argc, char* argv[])
{const Student s("张三");s.test1=5;//常对象可以修改静态类的数据成员test1cout<<Student::test1<<endl;s. modify();//常函数修改return 0;
}

程序输出结果是:

5
15

参考文献

[1] C++高级进阶教程.陈刚.武汉大学出版社.1.5mutable的用法.P12-P14

C++ mutable 的用法相关推荐

  1. 转:C++中const、volatile、mutable的用法

    const修饰普通变量和指针 const修饰变量,一般有两种写法: const TYPE value; TYPE const value; 这两种写法在本质上是一样的.它的含义是:const修饰的类型 ...

  2. C++中const、volatile、mutable的用法

    From: http://blog.csdn.net/wuliming_sc/article/details/3717017 const修饰普通变量和指针 const修饰变量,一般有两种写法: con ...

  3. [转]C++中const、volatile、mutable的用法

    原文:https://blog.csdn.net/imJaron/article/details/79657642 const意思是"这个函数不修改对象内部状态". 为了保证这一点 ...

  4. C++中mutable的用法

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

  5. c++ mutable的用法

    在C++中,mutable也是为了突破const的限制而设置的.被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中. 我们知道,如果类的成员函数不会改变对象的状态,那么这个成 ...

  6. c++ 中mutable的用法

    multable虽然在日常的工作中很少用到,但是毕竟multable属于c++语法中的一个关键自所以,在大多数的面试中经常被提到,所以如果你要重新找工作了还是要了解这个关键字的 再了解multable ...

  7. [转] C++中 const, volatile, mutable用法

    const.volatile.mutable的用法 const修饰普通变量和指针 const修饰变量,一般有两种写法: const TYPE value; TYPE const value; 这两种写 ...

  8. C++学习笔记:const和mutable的多种用法【Cherno】

    先来带着几个问题来: 为什么要const.mutable声明,const.mutable的运用场景是什么: 1:为什么要有const.mutable声明: const声明相当于你向系统的一个承诺,承诺 ...

  9. 一本好书 C++高级进阶教程

    PS:这是shx为我推荐的, <C++高级进阶教程_checklist by 66> 66一 第1章 C++基础知识 1.1 关于C++标准 1.2 文字常量和常变量 1.3 const的 ...

最新文章

  1. 第三次Scream冲刺
  2. HX711双通道AD转换模块
  3. python入门与提高实践,Python基础06:功能增强与实践,基础知识,学习,函数,加强,及,练习...
  4. boost::externally_locked相关的测试程序
  5. drf1 rest restful规范
  6. 解决鼠标滚动的时候多次执行函数
  7. 招一个写代码的女生:国外女程序员是什么样的
  8. 路由器访问控制列表详解
  9. MySQL数据库基础(三)——SQL语言
  10. OpenCL简单入门
  11. 六行shell脚本实现Android手机自动刷抖音极速版
  12. UBUNTU下安装热键驱动及触摸板禁用驱动
  13. Cors跨域(二):实现跨域Cookie共享的三要素
  14. 浅谈ipad阅读类应用设计
  15. java thread dump
  16. beforeSend 出现跨域问题,header里直接设置token就没问题----Day1
  17. 免费CDN加速服务 jsDelivr 支持npm,GitHub,WordPress
  18. 【本人秃顶程序员】作为字节跳动的研发面试官,有些话我不得不说!
  19. 【Rust日报】 2019-07-29:关于创建「更小的」Rust的思考
  20. 权威专家推荐的最佳安全图书

热门文章

  1. 6. Observable 和 数组的区别
  2. Cookie工具类的借鉴别人的ThinkGem的代码学习
  3. Redis添加密码认证Cacti监控读取Redis状态值为-1的最快速解决方案
  4. 通过Nethogs查看服务器网卡流量情况
  5. HTTP 协议 - 简单谈谈 TCP / IP (一)
  6. 想多赚钱就要多培养自己脖子以上的能力
  7. android——根据MVC框架设计的结构
  8. 卸载SD卡对MediaServer的处理
  9. linux下svn服务器的安装配置和使用
  10. C结构体之位域(位段)