标签:列表 对象 接下来 个数 include 成员 alt out 初始化
区别:
在我们使用初始化列表进行初始化时,它是关于C++初始化类成员的。它们是按照声明的顺序初始化的,而不是按照出现在初始化列表中的顺序。
三种类型必须通过初始化列表来初始化
初始化列表和构造函数初始化(赋值)的方式对于内置类型的成员(如int等)来说,其实没有什么区别,其性能和结果往往一样。对于非内置类型的成员(类类型)来说,是有区别的。
因为编译器总是确保所有成员对象在构造函数体执行之前初始化,所以类类型的数据成员对象,在进入构造函数体之前已经完成构造。例子中编译的代码将调用base::base()来初始化b(这里调用一次base构造函数),这在控制到达赋值语句前完成。接下来有调用一个赋值运算符函数。结果是调用了两个base函数(构造函数和赋值操作符)。
#include <iostream> using namespace std; class base { public: base() { cout<<" empty construct"<<endl; } base(const base &b) { cout<<" copy construct"<<endl; } base& operator=(base &b) { if(&b!=this) cout<<" operator = construct"<<endl; return *this; } }; class my_base { public: my_base(base &b) { ba=b; cout<<" my_base construct"<<endl; } base ba; }; int main() { base b; my_base mb(b); return 0; }
把my_base类改成初始化列表形式
class my_base { public: my_base(base &b):ba(b) { cout<<" my_base construct"<<endl; } base ba; };
标签:列表 对象 接下来 个数 include 成员 alt out 初始化
原文地址:https://www.cnblogs.com/tianzeng/p/10503387.html