1. {} 初始化
C++98 中,允许使用 {}
对数组进行初始化。
int arr[3] = { 0, 1, 2 };
C++11 扩大了 {} 初始化
的使用范围,使其可用于所有内置类型和自定义类型。
struct Date
{
int _year;
int _month;
int _day;
Date(int year, int month, int day)
:_year(year)
,_month(month)
,_day(day)
{}
};
int main()
{
// 两种常见的用法:
Date d1{2024, 6, 8};
Date d2 = {2024, 6, 8};
// 列表初始化可用于 new 表达式
int* pa = new int[4]{ 0 };
return 0;
}
2. std::initializer_list
int main() { auto arr = { 1, 2, 3 }; cout << typeid(arr).name() << endl; // typeid().name() 用于查看对象的数据类型 return 0; }
std::initializer_list
是 C++11 引入的一个模板类型,用于处理一组同类型的初始值。
它主要用于构造函数和函数参数列表中,允许使用 {}
初始化或传递一系列相同类型的值。
std::initializer_list 作为构造函数的参数,C++11 对不少容器增加了 initializer_list 作为参数的构造函数:
std::initializer_list 作为 operator=() 的函数参数:
常见的使用场景:
int main()
{
map<string, string> dict{ {"iterator", "迭代器"}, {"singularity", "奇异"}, {"sort", "排序"} };
vector<int> v = { 1, 2, 3, 4, 5 };
return 0;
}
3. pair 的补充知识
namespace MyTest
{
template<class T1, class T2>
struct pair
{
pair(const T1& first, const T2& second)
:_first(first)
,_second(second)
{}
template<class K, class V>
pair(const pair<K, V>& kv)
:_first(kv._first)
,_second(kv._second)
{}
T1 _first;
T2 _second;
};
}