C++高级进阶 第二季:mutable 关键字
零、文章来由
打算将基础知识在看书的同时系统的整理一下,方便大家也方便自己。整理的知识尽量参照书本知识,比网上获取的资料有更高的可信度。
一、作用
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 关键字相关推荐
- python进阶-第二季第一章
第八章:文件操作(IO)技术 116.写入文件,文件底层关系 一:简介 1.一个完整的程序一般都包括存储和读取,如果没有执行实际的存储python执行完操作数据就消失了.实际开发中我们经常需要从外部存 ...
- php安全新闻早八点-高级持续渗透-第二季关于后门补充一
文章转载于:https://micropoor.blogspot.hk/2017/12/php_24.html 这次继续围绕第一篇,第一季关于后门:https://micropoor.blogspot ...
- mysql 进阶到高级_MySQL 高级(进阶) SQL 语句精讲(一)
MySQL 高级(进阶) SQL 语句精讲 一.高级语句详解 (一).创建两个表 创建两个表方便实现下面的语句结果 use cw; create table localtion (Region cha ...
- 菜鸟的mysql高级进阶以及mysql数据库优化
菜鸟的mysql高级进阶以及mysql数据库优化 说明 一.mysql的逻辑分层及存储引擎 (1)逻辑分层 (2)存储引擎 二.事务的ACID原则 三.数据库设计的三大范式 四.索引 (1)二叉树搜索 ...
- shell编程,实战高级进阶教学
shell编程从入门到高级教程 一.shell编程初识 1.1 shell能做什么 1. 自动化批量系统初始化程序 (update,软件安装,时区设置,安全策略...) 2. 自动化批量软件部署程序 ...
- [java手把手教程][第二季]java后端博客系统文章系统——No10
项目github地址:github.com/pc859107393- 实时项目同步的地址是国内的码云:git.oschina.net/859107393/m- 我的简书首页是:www.jianshu. ...
- 第十章: 数据模型高级进阶
2019独角兽企业重金招聘Python工程师标准>>> 第十章: 数据模型高级进阶 在第5章里,我们介绍了Django的数据层如何定义数据模型以及如何使用数据库API来创建.检索.更 ...
- 百度AI实战营第二季:AI技术商业落地指南
4月 20日,百度 AI开发者实战营第二季启动,再次召集全国各地技术管理者,在北京"整装待发",并将陆续登陆成都.杭州.深圳.在新一季的实战营中,百度 AI将与开发者.合作伙伴一起 ...
- SpringBoot - 优雅的实现【业务校验】高级进阶
文章目录 Pre 需求 实现三部曲 实体类 Step1 搞两个自定义注解 Step2 搞自定义校验器 Step3 搞验证 小结 源码 Pre SpringBoot - 优雅的实现[参数校验]高级进阶 ...
- SpringBoot - 优雅的实现【参数校验】高级进阶
文章目录 Pre 概述 参数校验三部曲 Step1 搞依赖 Step2 搞参数校验的实体类 常用的校验注解 Step3 开始验证 存在的问题 使用 统一格式 + 全局异常Handler 优化 源码 P ...
最新文章
- 领歌LeangooV6.5.3:支持评论编辑,看板动态跳转
- Java对象XML序列化框架-Simple2.0
- axios请求接口http_Vue使用Axios实现http请求以及解决跨域问题
- 《编译与反编译技术实战》——第2章编译器实践概述
- css 水珠动图,CSS3逼真水珠特效
- java邮件发送代码_用Java实现最简单的邮件发送代码
- 批量PDF转换成Office文件 PDF转换器下载
- jquery easyui dataGrid动态改变排序字段名
- alchemy php,Python下SQLAlchemy的简单介绍
- atitit.提升开发效率---mda 软件开发方式的革命
- 2016年1月中国域名商解析量14强:排名变动大
- xsemaphoretake返回_FreeRTOS例程3-串口中断接收不定长的数据与二值信号量的使用
- egg服务重启及child_process的使用
- 数字信号处理:重要知识点整理
- 设施规划选址——重心法
- mysql世界国家省市地区的信息中英文
- 新概念第三册背诵: Lesson 1 - A Puma at large
- 腾讯优图计算机招聘视觉大咖(2022届校招+实习)
- 民航飞行学院计算机研究生就业,数据说话:文科硕士研究生就业变迁史
- linux运维笔记:动态网页资源
热门文章
- 小写的tensor接受数据,大写的Tensor()接受的是shape,数据的维度
- php7 mysql部署_windows上apache+php+mysql环境部署(php7安装失败,勿模仿!!)
- 方舟生存进化联机显示没有找到服务器,方舟生存进化搭建服务器联机教程_方舟生存进化怎么联机_牛游戏网...
- /etc/rc.local开启自启不执行问题
- OracleLinux6的安装
- 用云来实现主机效率的最大化 CSC这家公司是怎么做的?
- adb shell 出现 error :
- BizTalk Server 2010 - 使用 WCF Service [ 中篇 ]
- 字母串按照字典序排序
- 【问题解决】c.a.c.n.c.NacosPropertySourceBuilder : parse data from Nacos error,dataId:xxxxxx.yml