初始化列表:对象的成员变量定义的地方
注意点
1. 类里面的缺省值是给初始化列表的,用于定义
2. 初始化列表内自定义类型: 是去调用他的构造函数,自定义类型变量有默认构造函数,带缺省值,也可以不用默认构造函数,很灵活,不规定一定调哪个,只要调了构造函数就可以
3. 没有默认构造函数的自定义类型成员变量: 自定义类型变量 没有 默认构造函数 的时候,对象定义时(Date d1;),没有值可以给改变量定义,并且不知道怎么传值给改变量的构造函数,所以放在初始化列表里面定义比较好。其他的必须在定义的时候初始化的类型也适合初始化列表
4. 重点:所有变量成员都要走一遍初始化列表定义, 但对同一个变量我们最多显式写一次
5. 局限性:不能对要拿 来做定义的值 进行别的处理后在赋值(检查,初始化malloc出来的空间 等等)
6. 初始化列表定义的顺序不按照初始化列表里的顺序,而是声明的顺序定义
类型提升
1. 定义: 整型提升 有个临时变量,存提升后的值,再赋值给更大类型的变量,具有常性。
但是 特别的 Date d = 2;类型提升 但现在的编译器会 优化成构造拷贝,但原本是用 2 构造函数初始化 新变量 , 再拿新变量 赋值 给创造出的 第二个新变量 。
2. const A& aa = 2;可以 因为临时对象具有常性,这里是临时对象构造函数,再用引用。
静态成员变量和函数
1. 静态成员变量不属于某一个对象,类的每一个对象共享,初始化列表是对对象的专属成员变量定义,静态变量无法在此定义。 不可以给缺省值,缺省值是给初始化列表的。
2. 必须在 全局位置 定义 静态成员变量,定义时可以突破私有的限制(必须要有定义)
3. 静态成员函数没有this指针,给定了类域就可以访问静态变量,但因为无 this ,无法访问其他成员变量。
静态静态成员函数里面不可以调用非静态成员变量,因为没有this ,只能访问类的公共资源。