使用{}进行初始化工作,在格式上更加整齐。
编译器在看到{}出现的时候,会做出一个initializer_list(内部关联到一个array),使用{}的时候实际上是使用initializer_list进行初始化工作。
如:
int values[]{1,2,3,4,5,6};//initializer_list<int>(); vector<int> v{2,4,6,8,10, 12};//initializer_list<int>(); vector<stirng> citys{"Beijing", "ShangHai", "ShenZhen"};//initializer_list<string>(); complex<double> c{1.1, 2.2, 3.3, 4.4};//initializer_list<double>();使用{}的方式,不仅在格式上更为一致规范,并且在碰到一种以initializer_list作为参数的时候,不会因为采用了一个一个传入的方式造成异常。
另外,在使用{}设置的时候,如果采用空{}的方式,同样会给予一个默认的初值。如:
int i;//此时i的值未定义 int j{};//此时j=0 int *p;//此时p的值未定义(野指针) int *q{};//此时q=nullptr;另外,使用{}进行初始化的时候,如果类型不一致也会报出警告(有的是报错)。如:
int i{2};//√ int j{2.3};//×(warning or error)以一个类来继续深化一下;
class Pclass { public: Pclass(int a, int b) { cout << a << ends << b << endl; } Pclass(initializer_list<int> initList) { for (auto i : initList) { cout << i << ends; } cout << endl; } }; Pclass p1(1,2); //调用 Pclass(int, int) Pclass p2{1,2}; //调用 Pclass(initializer_list<int>); Pclass p3{1,2,3}; //调用 Pclass(initializer_list<int>); Pclass p4 = {1,2}; //调用 Pclass(initializer_list<int>);