当前位置:首页 > 公众号精选 > C语言编程
[导读]01—mutable关键字详解与实战在C中mutable关键字是为了突破const关键字的限制,被mutable关键字修饰的成员变量永远处于可变的状态,即使是在被const修饰的成员函数中。在C中被const修饰的成员函数无法修改类的成员变量,成员变量在该函数中处于只读状态。然而...


01

mutable关键字详解与实战


在C 中mutable关键字是为了突破const关键字的限制,被mutable关键字修饰的成员变量永远处于可变的状态,即使是在被const修饰的成员函数中。
在C 中被const修饰的成员函数无法修改类的成员变量,成员变量在该函数中处于只读状态。然而,在某些场合我们还是需要在const成员函数中修改成员变量的值,被修改的成员变量与类本身并无多大关系,也许你会说,去掉函数的const关键字就行了。可问题是,我只想修改某个变量的值,其他变量希望仍然被const关键字保护。

现在有个场景,我们想获取函数被调用的次数,代码如下:


class Widget{
public:
    Widget();
    ~Widget() = default;

    int getValue() const;
    int getCount() const;

private:
    int value;
    int count;
};
这里我们想要获取getValue函数被调用次数,普遍的做法是在getValue函数里对成员变量count进行加1处理,可是getValue被关键字const修饰啊,无法修改count的值。这个时候mutable派上用场了!我们用mutable关键字修饰count,完整代码如下:

#include 

class Widget{
public:
    Widget();
    ~Widget() = default;

    int getValue() const;
    int getCount() const;

private:
    int value;
    mutable int count;
};

Widget::Widget() : value(1), count(0) { }

int Widget::getValue() const{
    count ;
    return value;
}

int Widget::getCount() const{
    return count;
}

int main()
{
    Widget w1;

    for(int i = 0; i < 5; i ){
        w1.getValue();
    }
    std::cout << w1.getCount() << std::endl;
    return 0;
}
被mutable修饰的成员变量count在getValue函数里进行加1计数,编译运行输出如下:

5既保护了其他成员变量,又能达到我们单独修改成员变量count值的目的。版权申明:内容来源网络,版权归原创者所有。除非无法确认,都会标明作者及出处,如有侵权烦请告知,我们会立即删除并致歉。谢谢!table custom_select_card mp_profile_iframe" data-pluginname="mpprofile" data-id="MzU3MzUzMTYwMg==" data-headimg="http://mmbiz.qpic.cn/mmbiz_png/UKAAnU3jHQR6cFyUcQnP4ibMIwOrqMhBhxdqV0r5xCib6cWXJU5TgGaLDRnCND4aHvFjTw8Y361eaeWTaQ63Z1CQ/0?wx_fmt=png" data-nickname="C语言编程" data-alias="cyuyanbiancheng" data-signature="C语言,可以不用,但不能不会!" data-from="0">

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动模块RSC6218A 5W-18W迷你高效驱动电源应用,小功率、小体积、高效率

关键字: LED驱动模块 驱动电源应用 LED电源芯片

业内消息,近日台积电在北美技术研讨会上宣布,正在研发 CoWoS 封装技术的下个版本,可以让系统级封装(SiP)尺寸增大两倍以上,实现 120x120mm 的超大封装,功耗可以达到千瓦级别。

关键字: CoWoS 台积电 封装

据外媒报道,字节正在内部探索出售TikTok美国业务多数股权,并援引内部人士披露的信息称 “沃尔玛或为最理想买家”。报道还称,讨论中的一种情况是字节出售美国50%以上TikTok股份,但保留少数股权。

关键字: 字节跳动 TikTok

业内消息,HMD 正在计划重启一些经典的诺基亚功能手机。今年 3 月初,该公司预告了将于 5 月发布的一款功能手机。现在该机的身份已经曝光,新款诺基亚 3210 的谍照已经泄露,展现了新机部分新特性。

关键字: 诺基亚 功能机 HMD

业内消息,近日有一位网友在各大社交媒体发文表示,自己离职后,公司将自己所有的期权全部作废。

关键字: 期权 微博

业内消息,在昨天的中关村论坛未来人工智能先锋论坛上,生数科技联合清华大学正式发布中国首个长时长、高一致性、高动态性视频大模型——Vidu。Vidu是自Sora发布之后全球率先取得重大突破的视频大模型,性能全面对标Sora...

关键字: Sora 清华 AI Vidu

业内消息,近日高通公司宣布推出针对桌面平台的全新骁龙 X Plus 处理器。

关键字: 高通 骁龙 X Plus 处理器

近日,台积电在圣克拉拉年度技术研讨会上宣布首个“埃级”制程技术:A16。A16 是台积电首次引入背面电源输送网络技术,计划于 2026 年下半年开始量产。同时,台积电也在重新命名工艺节点,标志着「埃级」时代的开始。

关键字: 台积电 A16

4 月 25 日消息,4 月 25 日,国际数据公司(IDC)发布 2024 年第一季度中国手机市场跟踪报告,荣耀以 17.1% 的市场份额拿下第一,华为占 17.0% 位列第二,OPPO、苹果和 vivo 分别位列第三...

关键字: 荣耀 华为

业内消息, 近日华为全新Pura 70系列手机正式开售引发广大 数码爱好者追捧,但是有网友注意到这款手机的“AI修图”功能,竟然可以将照片中的人物衣服消除,并拍成视频发布网络。

关键字: 华为Pura70 华为
关闭
关闭