之前很少见到声明时初始化,才发现是C++11后支持的新特性,做个记录
在C++11之后,声明时初始化->初始化列表->构造函数初始化
因此假如三种初始化方式同时存在的话,那么最后保留的成员变量值肯定是构造函数中初始化的值。
声明时初始化的使用场景
一个优点是直观,你在声明的时候顺便给一个初始值,bravo,别人在看你代码的时候,点一下调到声明也能看到你赋予的初始值,不用再去看构造函数那里给的什么值
第二个优点更有用了,比如你要定义多个构造函数,每个构造函数都用列表初始化的方法初始化,麻烦。
#include <iostream>
using namespace std;
class A
{
public:
int a = 1;
A(int a_) :a(2) { a = 3; }
};
int main()
{
A a;
cout << "a.a=" << a.a << endl;
return 0;
}
列表初始化的使用场景
- const成员变量只能用成员初始化列表来完成初始化,而不能在构造函数内赋值
- 初始化的数据成员是对象
- 需要初始化引用成员数据
但是,需要注意列表初始化的顺序,不过IDE会提示你的
构造函数初始化的使用场景
第一个就是拷贝和赋值构造函数里(不然怎么叫赋值构造函数呢)