先上结论
使用初始化列表主要基于性能问题。
- 对于内置类型,初始化列表与构造函数几乎无差异
- 对于类类型(特别是复杂类型),由于使用初始化列表少调用了一次默认构造函数的过程,对数据密集型的类来说,是非常高效的!。
代码实例
针对于类类型,来证明【初始化列表少调用了一次默认构造函数】
#include <iostream>using namespace std;class AA{public:AA(){std::cout << "AA: default constructor" << std::endl;}AA(const AA&){std::cout << "AA: copy constructor" << std::endl;}AA& operator=(const AA&){std::cout << "AA: assign constructor" << std::endl;return *this;}~AA(){std::cout << "AA: destructor" << std::endl;}};class BB{public:BB(AA& _a)#ifdef INITIAL:a(_a){#else{a = _a;#endifstd::cout << "BB: default constructor" << std::endl;}~BB(){std::cout << "BB: destructor" << std::endl;}private:AA a;};int main() {AA a;std::cout << "--------------------------" << std::endl;BB b(a);std::cout << "--------------------------" << std::endl;return 0;}
执行结果分析(仅如下两行代码修改)
- 编译命令:
g++ .\initial.cpp -o init

- 编译命令:
g++ -DINITIAL .\initial.cpp -o init

由两个图对比可知:
通过初始化构造【类对象】,可以减少1次构造函数
