[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= ...
随机推荐
- 全选全不选案例table表格
全选全不选案例table表格 案例一纯table表格 <table class="table table-bordered"> <thead class=&quo ...
- el-table单元格样式更改
前几天遇到一个关于el-table表格样式的问题一直没解决 因为在el-table-column加样式并不生效所以更改起来比较麻烦 后来了看来element官方文档和在一些关于此方面的博客,使用了一个 ...
- JAVA基础之JavaEE与MVC
所谓的架构.模式都是方便开发和查看的,分工明确的,理解每层的具体的意义! 一.JavaEE: 1.Java EE,Java 平台企业版(Java Platform Enterprise Edition ...
- 报错The "chunk" argument must be one of type string or Buffer. Received type object
报错内容: TypeError [ERR_INVALID_ARG_TYPE]: The "chunk" argument must be one of type string or ...
- 如何搭建java web的开发环境,以及mysql的安装过程
1 http协议响应 http响应由三部分组成: 状态行: 响应报头: 响应正文: 1 下载JDK,安装并配置环境变量 2 配置环境变量的步骤: 在系统变量栏中单击新建按钮,新建变量JAVA_HOME ...
- 谷歌hack语法
搜索标题 intitle:"登入" //加引号是精确搜索 搜索正文 intext:"登入" 在URL中搜索 inurl:"/phpmyadmin&qu ...
- FIneUICore 版本的 AppBoxMvcCore
http://www.51aspx.com/code/codename/64088 CORE版本的APPBOXMVC欢迎下载
- Flask整合WebLoader 用于大附件拆分上传再合并
博客:https://blog.csdn.net/jinixin/article/details/77545140 github:https://github.com/jinixin/upload-d ...
- day 03作业
目录 作业 简述执行Python程序的两种方式以及他们的优缺点: 简述Python垃圾回收机制: 对于下述代码: 10的引用计数为多少? x对应的变量值257的引用计数为多少? 简述Python小整数 ...
- Linux 磁盘配额(XFS & EXT4)
若是在Linux中搭建了FTP服务器,为了安全性,就要考虑磁盘配额,以防服务器磁盘空间被恶意占满. 磁盘配额概述 1.作用范围:只在指定的分区有效. 2.限制对象:主要针对用户.组进行限制,对组账号限 ...