[C++] const和mutable关键字使用方法
const 修饰的变量为常成员变量,表示此变量不能被修改赋值,并且构造函数中只能用初始化列表的方式初始化,其他初始化方式都是错误的
const 修饰的函数为常成员函数,表示此函数中只能读取成员变量,不能修改成员变量
const 修饰的对象为常对象,常对象保护了对象中所有的数据成员不能被任何函数访问和修改,只能使用常成员函数来访问。
如果一个对象被声明为常对象,它只能调用该对象的 const 型成员函数。
常对象定义格式:
// 下面两种方式都可以
const 类名 对象名;
类名 const 对象名;
mutable 是为了突破 const 的显示而设置的,被 mutable 修饰的变量,将永远可变,即使在 const 修饰的函数中。
#include "iostream"
using namespace std;
class Student {
private:
const int a;
const int b = ;
int c = ;
mutable int d;
public:
// 只能用初始化列表的方式初始化常量
explicit Student(int a) : a(a) {
// 这种方式初始化常量是错误的
//this->b = 56;
}
void print() const {
// 常成员函数中不能修改成员变量
//this->c = 78;
// mutable修饰的变量可以在常成员函数中修改
this->d = ;
cout << a << " " << b << " " << c << " " << d << endl;
}
void print1() {
cout << a << " " << b << " " << c << " " << d << endl;
}
};
int main(void) {
Student stu1();
stu1.print();
stu1.print1();
const Student stu2();
// 常对象只能调用常成员函数
stu2.print();
// 错误
//stu2.print1();
return ;
}
[C++] const和mutable关键字使用方法的更多相关文章
- const成员函数和mutable关键字
一.const成员函数 class MyClass { public: void fun() const { } private: int m_nValue; } const成员函数内不能修改成员变量 ...
- php类中的$this,static,const,self这几个关键字使用方法
本篇文章主要分享一下关于php类中的$this,static,final,const,self这几个关键字使用方法 $this $this表示当前实例,在类的内部方法访问未声明为const及stati ...
- [转]C++类成员修饰const和mutable
const:常量,不变的 mutable:易变的 从意思上理解,可见const和mutable是一对反义词,它们都是C++的关键字. const成员函数不能修改调用它的对象.类的成员函数可以被声明为c ...
- volatile关键字和mutable关键字
如果不用volatile关键字会如何?可能会造成一个后果就是:编译器发现你多次使用同一个变量的值,然后它可能会假设这个变量是不变的值,并且把这个变量的值放入寄存器中,方便下一次使用,提高存取速度. 一 ...
- C++98常用特性介绍——mutable关键字
讲mutable前,先讲一下const函数,讲const函数前,先讲一下函数前后加const的区别 一.C++函数前后加const的区别 1)函数前加const:普通函数或非静态成员函数前均可加con ...
- 面试问题之C++语言:mutable关键字
转载于:https://www.cnblogs.com/xkfz007/articles/2419540.html mutable关键字 mutable的中文意思是"可变的,易变的" ...
- C#基础知识七之const和readonly关键字
前言 不知道大家对const和readonly关键字两者的区别了解多少,如果你也不是很清楚的话,那就一起来探讨吧!探讨之前我们先来了解静态常量和动态常量. 静态常量 所谓静态常量就是在编译期间会对变量 ...
- 用C#中的params关键字实现方法形参个数可变
个人认为,提供params关键字以实现方法形参个数可变是C#语法的一大优点.在方法形参列表中,数组类型的参数前加params关键字,通常可以在调用方法时代码更加精练. 例如,下面代码: class P ...
- destoon实现调用热门关键字的方法
本文所述的destoon调用热门关键字的方法是根据数据库里面的保存的搜索的关键字来显示的.每个模块下面都有各自的关键字下面是调用的标签: ? 1 <!--{tag("moduleid= ...
随机推荐
- MySQL数据库之互联网常用分库分表方案
一.数据库瓶颈 不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值.在业务Service来看就是,可用数据库连接少甚至无连接可用.接下来就 ...
- 机智云连接esp8266--远程控制风扇转速
概述 下面我们使用esp8266开发板和机智云云端,实现如何将一个USB风扇,改造成可以远程控制转速的智能风扇. 1.准备工作 硬件: (1)esp8266开发板 (2)USB线 (3)USB风扇 软 ...
- vip视频播放
插件 Tampermonkey https://greasyfork.org/zh-CN
- day 06 预科
目录 if判断 if判断习题 for循环 for循环习题 微信机器人 if判断 # 一条狗朝你过来了,你会干吗? 判断: 如果狗是大长腿牵来的狗--->打招呼:如果是条疯狗,跑. # if:如果 ...
- Pandas 数据筛选,去重结合group by
Pandas 数据筛选,去重结合group by 需求 今小伙伴有一个Excel表, 是部门里的小伙9月份打卡记录, 关键字段如下: 姓名, 工号, 日期, 打卡方式, 时间, 详细位置, IP地址. ...
- WinServer-the security database on the server does not have a computer account for
用了本地的administrator登陆
- 使用SSH配置git服务器免密提交
1. 生成SSH 1.1下载 下载工具 puttygen.exe ,当然其他工具请自行搜索. 下载地址: 下载地址1 百度网盘 (提取码: if8g)https://pan.baidu.com/s ...
- 【linux-command】Chrome安装linux-command插件
一.linux-command是什么 550 多个 Linux 命令,内容包含 Linux 命令手册.详解.学习,值得收藏的 Linux 命令速查手册.Githb地址: https://github. ...
- ELK Stack部署
部署ELK Stack 官网:https://www.elastic.co 环境准备: ip hostname 服务 用户.组 192.168.20.3 node2003 kibana6.5,file ...
- Linux文本处理三剑客之grep及正则表达式详解
Linux文本处理三剑客之grep及正则表达式详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Linux文本处理三剑客概述 grep: 全称:"Global se ...