【转】https://blog.csdn.net/bitcarmanlee/article/details/124188537
在C++里,初始化类成员,有两种方式:
- 列表初始化
- 构造函数内赋值
- 列表初始化示例
class D {
int a, b;
string c;
public:
D() : a(1), b(2), c("sss") {
cout<<"a is: "<<a<<endl;
cout<<"b is: "<<b<<endl;
cout<<"c is: "<<c<<endl;
}
};
- 构造函数内赋值
class D {
int a, b;
string c;
public:
D(int a, int b, string c) {
this->a = a;
this->b = b;
this->c = c;
cout<<"a is: "<<a<<endl;
cout<<"b is: "<<b<<endl;
cout<<"c is: "<<c<<endl;
}
};
int main(int argc, char const *argv[])
{
D d(1, 2, "sss");
return 0;
}
二者的差别
当采用列表初始化的时候,代码直接调用了成员变量的构造函数,只需要一步就可以完成。 而在构造函数中初始化的时候,先调用的是成员变量的默认构造函数构造了类成员,然后再调用赋值运算符对之前默认构造的类成员进行赋值,这实际上进行了两步操作。 当类的结构较为复杂的时候,会存在性能上的差异。
网友评论