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;};
}