C++11以后,对象的初始化可以通过三种方式给出:(), = 和 {}。
{} 初始化列表(Uniform Initiaization)。
使用{}的初始化方式称为适用于任何对象初始化的场景。
{} 的新特性:
- 禁止基础类型的隐性转换
int a(3.01); // a = 3 int a = true; // a = 1 int a{4.3}; // 报错
- 避免将对象的默认构造转换成函数声明的情况发生
A A(); // 声明一个返回值为A的函数A() A A{}; // 声明一个A数据类型的元素,并调用默认构造函数
- 当使用 {} 初始化auto变量时,类型推断是std::initializer_list,而不是其他数据类型
auto f{1}; // f 是 std::initializer_list 类型
有std::initializer_list类型的构造函数时,优先调用std::initializer_list类型的构造函数。
如果是{}的空参列表,则调用默认构造函数。