C++——初始化列表
来源:互联网 发布:用迅雷下载网络异常 编辑:程序博客网 时间:2024/05/05 16:45
我们已经知道const变量在C++里成了真正意义上的常量了,const变量的值保存在符号表里,虽然某些操作也会为其分配内存,但是值并不会保存在那块分配的内存。既然是常量,所以我们不能在程序里作为左值,所以必须在定义的时候就初始化,但是类成员变量粗了static const int成员变量,其他类型的都只能定义,不能定义的时候初始化,那么我们可以在类里提供一个const类型的成员变量嘛?编译器是允许呢!
那我们在哪里初始化const类型的成员变量呢?难道在构造函数中嘛,肯定不行,const不能是左值啊。所以就引出了我们今天的主角,初始化列表。
当然初始化列表可以对任何一个成员变量进行初始化,不仅仅是const类型的成员变量。
初始化列表是在构造函数的函数体之前执行的操作。而且比较有趣的是,初始化的顺序并不是按照初始化列表中的出现顺序,而是由成员变量声明的顺序决定的。通过一小段代码说明。
class Test{ int a; int b; const int c;public: Test():c(0),b(0) { a = 0; }};
在这里使用了初始化列表对一部分成员变量进行了初始化,这里不考虑a的初始化了,因为它是在构造函数内部,此时初始化列表已经执行完操作了。初始化列表首先出现的是c,其次是b,但是按照声明的顺序,是b先被初始化为0,然后c被初始化0。此时a并没有初始化,如果列表中有a,不管第几个出现,一定是第一个被初始化的。
看似到这里都Ok了,其实并没有。因为在编译的时候const类型的成员变量没有初始值,所以无法进入常量表成为真正的常量。类中的const类型成员变量会分配内存,只是c语言中意义上的具有只读属性的变量,说到底类中的const类型变量还是变量,而不是常量,可以通过强制转换为非const指针或引用修改。这就真正叙述完了。
阅读全文
0 0
- C++—初始化列表
- C++——初始化列表
- c++——成员初始化列表
- C/C++--初始化列表
- [C++] 列表初始化
- c++-类的初始化列表
- c++の对象初始化列表
- 关于C++——理解C++默默编写并调用了哪些函数&&函数初始化式(初始化列表相关)
- C++主题——成员初始化列表
- C++主题——成员初始化列表
- C++主题——成员初始化列表
- C++进阶——初始化列表
- 【C/C++】构造函数的初始化列表
- 构造函数初始化列表(C++)
- C++:只用初始化列表初始化变量的几种情况
- c——初始化 赋值
- C++构造函数初始化列表——笔记
- C++对象模型——成员初始化列表(第二章)
- 1133. Splitting A Linked List (25)
- 看了毁你三观的PCB设计理论 高速PCB外层还要不要覆铜了
- 【我的Java笔记】数据结构
- 1028. 人口普查(20)
- Log4J使用笔记
- C++——初始化列表
- 1029. 旧键盘(20)
- 6.13
- 2D 动画调整 position 产生的位移问题
- linux安装scrapy报错 Python.h: 没有那个文件或目录
- 大整数JAVA算法
- 身份证号码简单检验
- wpf中imagesource 路径设置问题
- 算法练习之前n个数的全排列(1=<n<=9)