构造函数中私有成员初始化的差异(C++)

Ale*_*ell 1 c++ initialization default-constructor

我已经离开C++一段时间了,我试图确定定义类的私有成员变量(如果有的话)的这两个默认构造函数初始化之间的区别.类定义位于头文件中,而实现位于单独的文件中.所有私有成员变量都需要初始化为"0"或无意义的值.

注意:

int data [MAX_SIZE]是一个固定大小的编译时数组.int used:是数组的索引跟踪器.

一般来说,我习惯于通过以下方式初始化成员:

 // Default Constructor
 IntSet::IntSet()
 {
    data[MAX_SIZE-1] = {0}
    used = 0;
 }
Run Code Online (Sandbox Code Playgroud)

我正在梳理一些遗留代码并找到完全不同的语法:

 // Default Constructor
 IntSet::IntSet() : used(0)
 {
    data[MAX_SIZE-1] = {0};
 }
Run Code Online (Sandbox Code Playgroud)

最终结果有区别吗?

Chr*_*nis 5

成员在构造之前初始化,在构造函数的主体到达之前.有些情况下他们有所不同.例如:

  • 如果一个成员是const或一个引用,它必须在初始化列表中初始化,并且不能在构造函数体中初始化

  • 如果成员没有默认构造函数(或者您没有访问权限),那么您必须提供构造函数,它应该使用一些参数,并且只能在初始化列表中完成.

  • 如果对象是"大而昂贵"的创建和分配,那么你可能会默认构建对象然后在其上使用赋值运算符.(而不是同时用它的初始值构造它.)

对于整数和原始,像你描述的POD类型默认构造是微不足道的,所以无论哪种方式都是等价的,给定上述对reference,const等的限制.