C++高级进阶 第二季:mutable 关键字

零、文章来由

打算将基础知识在看书的同时系统的整理一下,方便大家也方便自己。整理的知识尽量参照书本知识,比网上获取的资料有更高的可信度。

一、作用

mutable 用来解决常函数中不能修改对象的数据成员的问题。

如果在一些情况下,希望在常函数中仍然可以修改某个成员变量的值,就在该变量前加上mutable。能在保证常量对象大部分数据成员仍然“只读”情况下,实现对个别成员的修改。

#include <iostream>
#include <string>
using namespace std;

class Student
{
    string Name; //默认为private
    int times_of_getname;
public:
    Student(char *name)
        :Name(name),times_of_getname(0) {

    }

    string get_name() {
        times_of_getname++;
        return Name;
    }

    void PrintTimes() const {
        cout<<times_of_getname<<endl;
    }
};

int main()
{
    const Student s("Bill王");
    cout<<s.get_name()<<endl;
    cout<<s.get_name()<<endl;
    s.PrintTimes();

    return 0;
}

如上程序会报错,因为常量对象s(信息不能被修改的学生实体),调用 非const 函数 get_name(),但是如果将 get_name() 改为 const,有无法修改 times_of_getname。

但如果修改为:

mutable int times_of_getname;

string get_name() const{
}

即可

二、使用注意事项

使用关键字mutable要注意以下几点:

(1)mutable 只用于类的非静态和非常量数据成员。

(2)mutable 关键字提示编译器该变量可以被类的const函数修改。

(3)一个类中,用mutable修饰的变量只能是少数,或者根本不使用,大量使用代表程序设计上的缺陷。


参考资料

[1]陈刚.C++高级进阶教程[M].武汉:武汉大学出版社,2008.

时间: 2025-01-21 08:13:49

C++高级进阶 第二季:mutable 关键字的相关文章

C++高级进阶 第一季:const 详解

零.文章来由 打算将基础知识在看书的同时系统的整理一下,方便大家也方便自己.整理的知识尽量参照书本知识,比网上获取的资料有更高的可信度. 一.从 文字常量和常变量 开始 补充:const并没有想象中的那么简单,详见新博文<C++底层知识 第三季:const详解(二)> 1.文字常量 程序中的特殊标识符或表达式,由于同时满足: (1)不可寻址(放在代码区) (2)值不可变 所以可视为文字常量.他们是 静态数组名.枚举变量.全局(静态变量)首地址.#define定义的常量. 整型文字常量: (1)

3Q大战第二季,周鸿祎不服广东法院判决

作为3Q大战的第二季,360与腾讯之间从网络转向法庭.如今腾讯诉360"扣扣保镖"不正当竞争案件在广东省高级人民法院做出一审判决,360"领得"高达500万元的巨额赔偿,但是360董事长周鸿祎并不接受,并提出此判决认定事实不清.适用法律错误的问题,存在明显的地方保护主义倾向,同时360已决定向最高人民法院提起上诉.看来双方的诉讼战还远远没有结束.  中国互联网最贵的赔偿  4月25日下午,备受各方关注的腾讯诉360"扣扣保镖"不正当竞争案终于有了

3Q大战进入第二季

2010年曾引发互联网行业巨震的"3Q大战",在平息一年多以后进入第二季.昨天,奇虎360起诉腾讯滥用垄断地位一案在广东省高级人民法院开庭.这起索赔额高达1.5亿元.号称"中国互联网反垄断法第一案"的案件庭审可谓旷日持久,从上午9点一直到晚上7点半,其间双方唇枪舌剑,剑拔弩张. >>直击 360:三理由诉腾讯垄断 昨天开庭后,原告360的代理律师陈述了起诉腾讯的三大理由: 首先,腾讯在"3Q大战"中擅自终止对用户的服务,并利用垄断地位

 “3Q大战”进入第二季

"3Q大战"进入第二季.腾讯.奇虎360先后将对方告上法庭,并提出了超过亿元的赔偿要求.4月18日,广东省高级人民法院将对原告奇虎360诉被告腾讯滥用市场支配地位纠纷一案进行一审.广东高院负责人表示,将对庭审过程实行全程公开,接受各界监督. 据南方网消息,本次奇虎360在广东省高院起诉腾讯,请求法院判令腾讯公司立即停止滥用市场地位,停止实施QQ软件用户不得与原告交易并捆绑搭售安全产品等行为.奇虎360还提出巨额索赔诉讼,要求腾讯公司公开道歉,并赔偿其经济损失1.5亿元. 报道称,该案件

《激情唱响》第二季全国各唱区的海选

辽宁卫视大型音乐选秀节目<激情唱响>第二季全国各唱区的海选以及与风行网合作的网上海选活动已经全面展开.日前,风行网<激情唱响>网络海选来到了中央民族大学,为网络赛区选手进行现场报名和VCR录制.此次活动是风行网络海选地面活动的第一站,活动录制的VCR也将通过风行网向全国网友播出.<激情唱响>是辽宁卫视在世界著名选秀节目<TheXFactor>模式基础上于去年推出的一档大型音乐选秀节目.<激情唱响>凭借高端的国际模式运作.出色的本土化内容融合和一流

SCO UNIX高级进阶(一)

第七节高级进阶 1.问题:我改了 hosts 文件,譬如: 127.0.0.1 localhost改成: 127.0.0.1 local 不重起系统,怎样让它生效? 答:# tcp stop # tcp start 建议:好多地方要用到本机的反馈地址的,建议不要修改!!! 2.问题:我想修改主机名,如何修改? 答:如果想修改主机名,用uname -S 主机名. 3.问题:怎么看我的SCO是多少用户? 答:uname -X 在liences manager中也可以看到!! uname -A 更好

《高级进阶DB2(第2版)——内部结构、高级管理与问题诊断》之我见

<高级进阶DB2(第2版)--内部结构.高级管理与问题诊断>之我见 从IT开发与运维角度来分析,千千万万的业务应用系统,最核心的最有价值的是业务数据:而这些多年来积累与沉淀下来的数据依托于数据库系统,数据库系统是否稳定与性能高低则是考验数据库内核,而作为核心之重的数据库内核则是各种商用与开源数据库服务器软件实现与关注的重点所在. 从数据库服务器软件的市场来看,DB2所占据的地位与份额真是犹如乒乓球界的王晧与羽毛球界的李宗伟,长期占居千年老二之位,位亦如其名啊(*_*) 作为要立志成为资深的DB

父节点-树状结构展示采购单Treeview 第二季

问题描述 树状结构展示采购单Treeview 第二季 第一季没有得到答案,现在想到能否把父节点定义为 PO号,子节点为PO号+产品号,这样的话,每个子节点可以找到对应的父节点..请高手列出详细方案,在线死等. 解决方案 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim dt As New DataTable '模拟数据(要求按采购单排

《士兵突击》第二季12强迎来强悍对手巨人城废墟本周展开残酷巷战

卫视加多宝凉茶<士兵突击>第二季将在本周五播出第10集.在上一集"寂静村"猎杀行动之后,幸运晋级的12强本周将在"巨人城废墟"迎来一场残酷的巷战.强悍对手 残酷巷战在上一集的猎杀行动中,3名退役老兵反串歹徒,为猛虎和猎豹两队制造了不小的麻烦.最后一次猎杀任务,猎豹队伤亡惨重,甚至队长宋晓东也被击中退出比赛,最终导致了猎豹队整体失利.在本周第十集的较量中,他们所遇到的对手将更加强悍.这一集中,12名现役特警将化身悍匪,向队员们的防守阵地发动亡命突袭,双方将