2.1 { }初始化
相信大家在初始化数组和结构体的时候,都使用过{}进行初始化
struct Date
{
int y;
int m;
int d;
};
int main()
{
int array1[] = { 1, 2, 3, 4, 5 };
int array2[5] = { 0 };
Date d = { 2024, 3,31 };
return 0;
}
到了C++11,{}初始化的范围变大了,使其可用于所有的内置类型和用户自定义的类型。
class Person
{
public:
Person(string name,string gender,int age)
:_name(name)
,_gender(gender)
,_age(age)
{}
private:
string _name;
string _gender;
int _age;
};
int main()
{
//不推荐
int a = { 1 };
vector<Person> v = { {"张三","男",20},{"李四","女",20}};
map<string, int> m = { {"苹果",1},{"香蕉",2} };
return 0;
}
2.2 initializer_list
其实支持这种操作的原因就是initializer_list的引入,可以把initializer_list看出一个模版类,{}就可以看作是initializer_list类,所以C++11的STL容器的构造都加了以initializer_list为参数的构造函数。