侯捷C++11课程笔记---第五,六次课

侯捷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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2asdLPoS-1636279827119)(D:\截图\11111.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SAlZIpu3-1636279827121)(D:\截图\11122.jpg)]

initializer_list 这个东西对应的array的指针,如果复制这个东西他只是浅拷贝

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4S5orIpb-1636279827122)(D:\截图\ac.jpg)]

min,max可以接受多个而非两个参数

需要视频资源的点赞私信即可当天获得

猜你喜欢

转载自blog.csdn.net/qq_47997583/article/details/121194745