初始化列表
在 C++98 标准中,花括号 {} 仅允许用于数组或结构体元素的统一列表初始化。
例如:
struct Point { int a; int b; };
int main() {
int arry[] = {1,2,3,4}; // 数组初始化
Point p = {1,2}; // 结构体初始化
return 0;
}
C++11 扩大了花括号初始化的适用范围,使其可用于所有内置类型和用户自定义类型。
// 对数组初始化
int arry1[]{1,2,3,4,5};
// 对内置类型初始化
int x{9};
// 对用户自定义类型初始化
Point p{9,9};
// 对 vector 容器对象进行初始化
vector<int> vec = {1,2,3,4,5,6,7,8,9};
注意: 使用初始化列表时,等号 = 是可选的。
std::initializer_list
std::initializer_list 是一个轻量级的模板类,定义在 <initializer_list> 头文件中。它提供了一种只读的视图来访问初始化列表中的元素,常用于构造函数、函数参数以及返回类型,以支持统一初始化语法。
虽然名字像容器,但它本质上是一个指向常量数据的视图。当你在容器构造中看到花括号初始化时,底层往往依赖它。


