C++官方文档:https://cppreference.cn/w/
1. 列表初始化
C++98中,可以用{}初始化数组和结构体:
cpp
//初始化
//初始化
struct Date
{
int _year;
int _month;
int _day;
};
int main()
{
int arr[] = {1, 2, 3, 4, 5};
Date d = {2026, 9, 10};
return 0;
}
C++11新增了列表初始化的方式:
- 一切对象皆可用
{}初始化 - 可以省略
=(但不建议)
编译器也在构造方面进行了优化:构造 + 拷贝构造 = 直接构造
cpp
//C++11列表初始化
struct Date
{
int _year;
int _month;
int _day;
};
int main()
{
int x = {1};
int y{2}; //省略=
Date d1 = {2026, 9, 10}; //构造 + 拷贝构造 = 直接构造
vector<Date> v;
v.push_back({2026, 9, 11});
return 0;
}
2. std::innitializer_list

C++11还支持std::initializer_list类:auto il = { 10, 20, 30 };
- 本质是在底层开一个数组,并拷贝数据
- 内部有
开始和结束两个指针 - 支持迭代器遍历
- STL容器支持
任意多个值进行初始化

(本质相同,和数组一样都是开空间存储)
cpp
//C++11的std::initializer_list
int main()
{
vector<int> v{1, 2, 3, 4, 5};
unordered_map<string> hashmap = {{"字符串", "string"}, {"整型", "int"}};
//内层pair为列表初始化,外层为std::initializer_list
return 0;
}
3. 两者区别
列表初始化的参数固定具体个数由类型决定;std::initializer_list的参数个数不限。