什么是初始化列表?
构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式,如:
class Entity { private: int _i; public: Entity(int i) :_i(i) { cout << "entity" << _i << "的构造" << endl; } };
ps:初始化列表中,每个成员只能初始化一次
初始化列表是每个成员定义的地方,无论有没有显式使用初始化列表,其默认都会使用初始化列表对成员进行初始化,故此有了一些必须要使用初始化列表的情况
- 未提供默认构造的自定义类型成员
需要在初始化列表内显示调用构造函数- const类型成员
const成员只有一次初始化的机会,所以必须定义时初始化- 引用成员变量
引用语法上也规定必须在定义时初始化tips:初始化时与初始化列表出现的成员顺序无关系,而是按照声明顺序进程初始化
如下:
class Entity { public: int _j; int _i; public: Entity(int i) :_i(i),_j(_i) { cout << "entity" << _i << "的构造" << endl; } ~Entity() { cout << "进行Entity的析构:" << _i << endl; } }; int main() { Entity entity(1); cout << entity._i << " " << entity._j << endl; return 0; }
解释:
由于_j是先进行声明,所以_j先用_i进行了初始化,但由于此时_i也未进行初始化,是个随机值,所以_j被初始化成为了随机值;随后_i才被初始化为1
C++类的构造函数之初始化列表
最新推荐文章于 2024-03-01 00:31:31 发布