浅谈C++的mutable关键字

c++11中推出了一种特殊的关键字:mutable用于修饰类变量。 它的作用是标注该变量一定会被修改,因此也就不是const类型。 目的是为了使这些成员变量在被const关键字修饰的成员函数中使用时,可以被修改。
但是我们会发现一个问题,那就是不使用const修饰的变量本身就是可以修改的,那为什么还要添加mutable关键字呢? 这里涉及到一个用法,也是关于mutable的最常用的基本用法了。 如果不希望类成员函数修改类对象的状态,那么这个成员函数一般会被const修饰,修饰成员函数后就不可以更改成员变量。 如果我们需要在const成员函数中修改一些与类对象状态无关的成员变量,就可以用mutable来将这些成员变量修改为可变的。
直接看下面这个例子:
#include class car{public: car(); ~car(); int getprice() const; /*调用方法 const成员函数*/ int getlen() const; /*调用方法 const成员函数*/private: int m_carprice; int m_carlen; mutable int m_carnum; };car::car(){ m_carprice = 50000; m_carlen = 5; m_carnum = 5;}car::~car(){}int car::getprice() const{ m_carnum++; //此处修改是可以,因为对m_carnum进行了mutable限定 std::cout << m_carprice << std::endl; return m_carprice ; // 无法修改该成员变量}int car::getlen() const{ return m_carlen; // 无法修改该成员变量}可以看到,在c++中被const修饰的成员函数无法修改类的成员变量,成员变量在该函数中处于只读状态。 然而,在某些场合我们还是需要在const成员函数中修改成员变量的值,被修改的成员变量与类本身并无多大关系,也许你会说,去掉函数的const关键字就行了。 可问题是,我只想修改某个变量的值,其他变量希望仍然被const关键字保护。 这样做相当于在函数中给mutable变量开了特例。
简单理解,在c++中,mutable就是为了突破成员函数 const的限制,可以在const函数里面来修改被mutable修饰的成员变量。 即使在一个const函数中,被mutable修饰的变量,将永远处于可变的状态。 这样,既保护了其他成员变量,又能达到我们单独修改成员变量count值的目的。

智能电力运维系统技术在高层建筑中的应用
Veeam赋能组织提升云数据策略
同轴步进马达驱动器TMC389的主要特性及应用分析
Vishay推出新款ESD保护阵列VBUS053BZ-HNH
SensorDynamics推出新款采用微型QFN40封装的
浅谈C++的mutable关键字
【解决方案】安科瑞能耗监测系统在物华大厦的研究与应用
打造新潮流:普渡机器人在网红电竞网咖大展身手
华为利用AGV远程控制解决了传统AGV采用Wi-fi远控信号稳定性差等弊端
贸泽电子荣获FTDI Chip颁发的全球优质分销商称号
印尼限制镍出口量,宁德时代被迫建厂
发动机转速传感器故障及排除方法
香港今年将安装数百个搭载传感器的智慧路灯
cmos图像传感器结构_cmos图像传感器市场
7月10-12日电博会登场 给您呈现不一样的视听盛宴
一个有关公众健康的名词-手机辐射
我国将继续鼓励集成电路产业发展
LT1634-微功率精准并联电压基准
水冷和风冷高低温冷热冲击试验箱的区别-贝尔试验箱
英飞凌推出OptiMOS 5 25V和30V产品家族,能效高达95%以上