myclass (unsigned int param) : param_ (param)
这种结构被称为成员初始化列表在C++中。
它初始化您的会员param_
的值为param
。
是什么初始化之间分配的内部构造的区别? &
有什么优势?
初始化使用初始化列表的成员并在构造函数体内为其指定值之间有区别。
当你通过初始化列表初始化字段时,构造函数将被调用一次。
如果您使用赋值,那么这些字段将首先使用默认构造函数进行初始化,然后使用实际值重新分配(通过赋值运算符)。
正如你所看到的那样,在后者中创建&赋值会有额外的开销,这对于用户定义的类可能相当重要。
对于整数数据类型(为此使用它)或POD类成员,没有实际的开销。
当你HAVE TO
使用成员初始化列表?
你将有(而被迫)使用,如果一个成员初始化列表:
你的类有一个基准件
你的类有一个const成员或
你的类没有默认构造函数
甲代码示例描绘HAVE TO
情况:
class MyClass
{
public:
int &i; //reference member, has to be Initialized in Member Initializer List
int j;
const int k; //const member, has to be Initialized in Member Initializer List
MyClass(int a, int b, int c):i(a),j(b),k(c)
{
}
};
class MyClass2:public MyClass
{
public:
int p;
int q;
MyClass2(int x,int y,int z,int l,int m):MyClass(x,y,z),p(l),q(m)
{
}
};
int main()
{
int x = 10;
int y = 20;
int z = 30;
MyClass obj(x,y,z);
int l = 40;
int m = 50;
MyClass2 obj2(x,y,z,l,m);
return 0;
}
MyClass2
没有默认构造函数,因此必须通过成员初始值设定项列表进行初始化。
请停止传播此功能的术语“初始化程序列表”。初始化程序列表不同。 –
请教,什么是“初始化列表”?据我所知,这是正确的术语,并且Google同意... –
@Tomalak:什么是正确的术语? “初始化列表”和“初始化列表”是我听过或看到过的唯一两个。但重要的是,如果你知道不同的话,那就很重要。 –