C++学习笔记--初始化列表
来源:互联网 发布:mv软件下载 编辑:程序博客网 时间:2024/06/06 20:59
当我们在类里使用const定义一个成员变量会发生什么?能够通过构造函数直接初始化const定义的标识符吗?
class Test{private: const int ci; int var1; int var2; int var3;public: Test() { //ci = 10;//error } int getCI() { return ci; }};
这段代码中说明了在构造函数里直接初始化const标识符是错误的。但是不对它进行初始化编译也是错误的,那么该如何初始化?肯定也不会是像以往那样往构造函数传入实参,现在需要使用另一种初始化方式----初始化列表。
利用C++提供的初始化列表可以对成员变量(包括const变量)进行初始化,具体语法规则为:
class Test :: Test() : var1(v1),var2(2),var3(3),ci(10){......}
语法规则简单,但是还是需要注意一下。
1、成员的初始化顺序与成员的声明顺序相同,即与初始化列表中的顺序无关。如上面构造函数的初始化列表顺序是var1最先,ci最后,但是实际初始化顺序却是最先ci,再var2,然后var1,最后才是var3.
2、初始化列表先于构造函数的函数体执行。当构造函数的函数体开始执行时,对象已经创建完毕了,执行函数体只是为了初始化构造函数的状态而已,所以说初始化
列表一定是在对象创建的同时执行,先于函数体。
当我们使用另一个类对象作为当前类成员变量时也需要用到初始化列表。为什么呢?因为在创建类对象是必须要进行初始化,但是在类中定义变量时又不能直接初始化,所以就通过初始化列表在创建新类对象的同时初始化对象成员变量。
做个小结:
1、类中的const成员会被分配空间
2、类中的const成员本质是只读变量
3、类中的const成员只能在初始化列表中指定初始值。
4、编译器无法直接得到const成员初始值,因此无法进入符号表成为真正意义上的常量
5、类中的const成员可以使用const_cast去除只读属性后通过指针修改值
6、初始化是对正在创建的对象进行初值设置,赋值是对已经存在的对象进行值设置
- C++学习笔记--初始化列表
- C++ 构造函数初始化列表学习笔记
- C++学习笔记23 初始化列表
- C++11 学习笔记 列表初始化
- 【C++学习笔记】列表初始化规则
- 学习笔记:数组成员初始化于构造函数初始化列表
- C/C++--初始化列表
- [C++] 列表初始化
- C++—初始化列表
- Object-c学习笔记十一-----对象初始化
- 初始化(C++primer5th学习笔记)
- C++学习笔记之 构造函数的初始化列表
- c++-类的初始化列表
- c++の对象初始化列表
- C++——初始化列表
- 【C/C++】构造函数的初始化列表
- 【C Prime Plus】学习笔记,Chapter 10,数组初始化问题
- Object-c基础编程学习笔记-对象初始化
- shell命令之find
- 度学习实践:如何使用Tensorflow实现快速风格迁移?
- 第7章 函数
- IO流的基本操作
- 路由器原理(一)
- C++学习笔记--初始化列表
- 人脸识别-闭集测试指标CMC曲线
- Android中传感器的使用:传感器和指南针
- 用不到 50 行的 Python 代码构建最小的区块链
- 权限控制框架shiro与spring整合详解
- 关于递归算法
- 学习笔记TF067:TensorFlow Serving、Flod、计算加速,机器学习评测体系,公开数据集
- 【3】用jsoup来实现简单的java爬虫-视频篇
- 《VC++深入详解》学习笔记---12章文件和注册表操作(2)