零、文章来由

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

一、作用

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

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

#include <iostream>
#include <string>
using namespace std;class Student
{string Name; //默认为privateint 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.

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

  1. python进阶-第二季第一章

    第八章:文件操作(IO)技术 116.写入文件,文件底层关系 一:简介 1.一个完整的程序一般都包括存储和读取,如果没有执行实际的存储python执行完操作数据就消失了.实际开发中我们经常需要从外部存 ...

  2. php安全新闻早八点-高级持续渗透-第二季关于后门补充一

    文章转载于:https://micropoor.blogspot.hk/2017/12/php_24.html 这次继续围绕第一篇,第一季关于后门:https://micropoor.blogspot ...

  3. mysql 进阶到高级_MySQL 高级(进阶) SQL 语句精讲(一)

    MySQL 高级(进阶) SQL 语句精讲 一.高级语句详解 (一).创建两个表 创建两个表方便实现下面的语句结果 use cw; create table localtion (Region cha ...

  4. 菜鸟的mysql高级进阶以及mysql数据库优化

    菜鸟的mysql高级进阶以及mysql数据库优化 说明 一.mysql的逻辑分层及存储引擎 (1)逻辑分层 (2)存储引擎 二.事务的ACID原则 三.数据库设计的三大范式 四.索引 (1)二叉树搜索 ...

  5. shell编程,实战高级进阶教学

    shell编程从入门到高级教程 一.shell编程初识 1.1 shell能做什么 1. 自动化批量系统初始化程序 (update,软件安装,时区设置,安全策略...) 2. 自动化批量软件部署程序 ...

  6. [java手把手教程][第二季]java后端博客系统文章系统——No10

    项目github地址:github.com/pc859107393- 实时项目同步的地址是国内的码云:git.oschina.net/859107393/m- 我的简书首页是:www.jianshu. ...

  7. 第十章: 数据模型高级进阶

    2019独角兽企业重金招聘Python工程师标准>>> 第十章: 数据模型高级进阶 在第5章里,我们介绍了Django的数据层如何定义数据模型以及如何使用数据库API来创建.检索.更 ...

  8. 百度AI实战营第二季:AI技术商业落地指南

    4月 20日,百度 AI开发者实战营第二季启动,再次召集全国各地技术管理者,在北京"整装待发",并将陆续登陆成都.杭州.深圳.在新一季的实战营中,百度 AI将与开发者.合作伙伴一起 ...

  9. SpringBoot - 优雅的实现【业务校验】高级进阶

    文章目录 Pre 需求 实现三部曲 实体类 Step1 搞两个自定义注解 Step2 搞自定义校验器 Step3 搞验证 小结 源码 Pre SpringBoot - 优雅的实现[参数校验]高级进阶 ...

  10. SpringBoot - 优雅的实现【参数校验】高级进阶

    文章目录 Pre 概述 参数校验三部曲 Step1 搞依赖 Step2 搞参数校验的实体类 常用的校验注解 Step3 开始验证 存在的问题 使用 统一格式 + 全局异常Handler 优化 源码 P ...

最新文章

  1. 领歌LeangooV6.5.3:支持评论编辑,看板动态跳转
  2. Java对象XML序列化框架-Simple2.0
  3. axios请求接口http_Vue使用Axios实现http请求以及解决跨域问题
  4. 《编译与反编译技术实战》——第2章编译器实践概述
  5. css 水珠动图,CSS3逼真水珠特效
  6. java邮件发送代码_用Java实现最简单的邮件发送代码
  7. 批量PDF转换成Office文件 PDF转换器下载
  8. jquery easyui dataGrid动态改变排序字段名
  9. alchemy php,Python下SQLAlchemy的简单介绍
  10. atitit.提升开发效率---mda 软件开发方式的革命
  11. 2016年1月中国域名商解析量14强:排名变动大
  12. xsemaphoretake返回_FreeRTOS例程3-串口中断接收不定长的数据与二值信号量的使用
  13. egg服务重启及child_process的使用
  14. 数字信号处理:重要知识点整理
  15. 设施规划选址——重心法
  16. mysql世界国家省市地区的信息中英文
  17. 新概念第三册背诵: Lesson 1 - A Puma at large
  18. 腾讯优图计算机招聘视觉大咖(2022届校招+实习)
  19. 民航飞行学院计算机研究生就业,数据说话:文科硕士研究生就业变迁史
  20. linux运维笔记:动态网页资源

热门文章

  1. 小写的tensor接受数据,大写的Tensor()接受的是shape,数据的维度
  2. php7 mysql部署_windows上apache+php+mysql环境部署(php7安装失败,勿模仿!!)
  3. 方舟生存进化联机显示没有找到服务器,方舟生存进化搭建服务器联机教程_方舟生存进化怎么联机_牛游戏网...
  4. /etc/rc.local开启自启不执行问题
  5. OracleLinux6的安装
  6. 用云来实现主机效率的最大化 CSC这家公司是怎么做的?
  7. adb shell 出现 error :
  8. BizTalk Server 2010 - 使用 WCF Service [ 中篇 ]
  9. 字母串按照字典序排序
  10. 【问题解决】c.a.c.n.c.NacosPropertySourceBuilder : parse data from Nacos error,dataId:xxxxxx.yml