网站首页 全球最实用的IT互联网站!

人工智能P2P分享Wind搜索发布信息网站地图标签大全

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

浅谈C++的mutable关键字

时间:2023-04-15 11:13

人气:

作者:admin

标签:

导读:C++11中推出了一种特殊的关键字:mutable用于修饰类变量。它的作用是标注该变量一定会被修改,因此也就不是const类型。目的是为了使这些成员变量在被const关键字修饰的成员函数中使用...

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值的目的。

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信