侯捷C++11课程笔记—第五,六次课
侯捷C++11课程笔记
第五,六次课:Initializer Lists
接受数量不定的参数Initializer Lists
设初值
int i; //i has undefined value
int j{}; //j is initialized by 0
int* p; //p has undefined value
int* q{}; //q is initialized by nullptr
不允许窄化转换
int x1(5.3); //OK
int x2 = 5.3; //OK
int x3{
5.0}; //ERROR
int x4 = {
5.3}; //ERROR
用std::initializer_list<>实现对不定参数个数的实现
void print(std::initializer_list<int> vals)
{
for(auto p = vals.begin();p!=vals.end();++p){
std::cout<< *p << "\n";
}
}
print({12,5,7,9,6});
他与Variadic Templates不同之处在于后者大括号内可以是不同类型的数
Class P
{
public:
P(int a,int b) //function1
{
cout << a << b << endl;
}
P(initializer_list<int> initlist) //function2
{
for(auto i : initlist)
cout << i << ' ';
}
}
P p(77,5); //P(int,int), a=77 ,b=5
P q{77,5}; //P(initializer_list<int>),values = 77 5
P r{77,5,42}; //P(initializer_list<int>),values = 77 5 42
P s={77,5}; //P(initializer_list<int>),values = 77 5
如果没有function2,那么q和s就会拆开同时也能成功初始化,但是r由于其中有三个数则无法初始化
{}背后是initializer_list<>,后者背后是array
initializer_list 这个东西对应的array的指针,如果复制这个东西他只是浅拷贝
min,max可以接受多个而非两个参数
需要视频资源的点赞私信即可当天获得