0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

浅谈C++的mutable关键字

CHANBAEK 来源:明解嵌入式 作者:Sharemaker001 2023-04-15 11:13 次阅读

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 函数
    +关注

    关注

    3

    文章

    4235

    浏览量

    61962
  • C++
    C++
    +关注

    关注

    21

    文章

    2085

    浏览量

    73300
  • 变量
    +关注

    关注

    0

    文章

    607

    浏览量

    28257
  • 关键字
    +关注

    关注

    0

    文章

    37

    浏览量

    6882
  • CONST
    +关注

    关注

    0

    文章

    43

    浏览量

    8125
收藏 人收藏

    评论

    相关推荐

    C语言关键字const的几种用法

    本期来讲解一个C语言的关键字——const。
    发表于 06-21 11:05 1391次阅读
    <b class='flag-5'>C</b>语言<b class='flag-5'>关键字</b>const的几种用法

    C++中常用关键字详解(2)

    C++中,volatile是一个关键字,用于修饰变量,告诉编译器该变量的值可能在程序流程之外被意外修改,因此编译器不应该对该变量进行优化(如缓存变量值或重排指令顺序)。
    发表于 08-08 16:15 240次阅读

    DSP编程技巧之17---非常“关键”的关键字

      使用cregister关键字,当我们定义的该类型的对象与C28x的标准的控制寄存器匹配时,编译器会自动产生相关的代码去控制对应的寄存器,使得我们可以在高级编程语言C/C++中对寄存
    发表于 08-20 11:38

    C++笔记010:C++C的扩展——register关键字增强

    的地址在C语言里面是会出错的。同样的代码我们放到C++编译环境下,发现编译是通过的!在C++中依然支持register关键字C++编译器有
    发表于 08-11 12:34

    C语言volatile关键字详解 精选资料分享

    1.volatile和什么有关百度翻译是这样子翻译volatile的:图1-1 百度翻译volatile截图volatile属于C语言的关键字,《C Primer Puls》 是这样解释关键字
    发表于 07-22 07:20

    标准C语言总共有32个关键字

    标准C语言总共有32个关键字
    发表于 01-12 15:59 0次下载

    C++语言基础讲解视频标识符与关键字

    C++语言基础讲解视频标识符与关键字,喜欢的朋友可以下载来学习。
    发表于 01-14 15:31 7次下载

    C语言32个关键字

    C语言32个关键字,感兴趣的小伙伴们可以看看。
    发表于 07-26 16:29 66次下载

    C51的符号和五大语句及关键字等详细资料说明

    本文档的主要内容详细介绍的是C51的符号和五大语句及关键字等详细资料说明包括了:C语言 基本标点符号,函数书写格式与函数调用,单片机五大语句与32个C语言
    发表于 12-11 17:34 29次下载
    <b class='flag-5'>C</b>51的符号和五大语句及<b class='flag-5'>关键字</b>等详细资料说明

    C++C的const关键字有何差别?

    C++C中的const关键字有何差别?
    的头像 发表于 02-03 14:51 1724次阅读

    C++mutable关键字详解与实战

    mutable关键字详解与实战 在C++mutable关键字是为了突破const关键字的限制,
    的头像 发表于 09-10 09:23 5454次阅读

    C++中的const关键字介绍

    前一篇文章我们主要介绍了C++中的复合类型引用和指针,这篇文章我们将会主要介绍C++中const关键字。有时候我们想定义一个值不能被改变的变量,例如我们想使用一个变量存储buffer的大小,如果我们不希望这个值被改变,那么我们就
    的头像 发表于 03-17 14:01 538次阅读

    const关键字应用总结

    C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性
    的头像 发表于 05-26 09:06 491次阅读

    C语言32个关键字可以分为这几类

    C语言是一种面向过程、抽象化的通用程序设计语言,广泛应用于嵌入式底层和系统开发。C语言关键字共有32个,根据用途,可分为四类:第一类:变量数据类型关键字:14个第二类:9条基本语句用到
    的头像 发表于 12-31 15:28 4596次阅读
    <b class='flag-5'>C</b>语言32个<b class='flag-5'>关键字</b>可以分为这几类

    快速掌握C语言关键字

    C语言中的32个关键字你知道多少个呢?根据关键字的作用分为四类:数据类型关键字、控制语句关键字、存储类型
    的头像 发表于 07-06 08:04 191次阅读
    快速掌握<b class='flag-5'>C</b>语言<b class='flag-5'>关键字</b>