栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

侯捷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 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 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),values = 77 5
P r{77,5,42}; //P(initializer_list),values = 77 5 42
P s={77,5}; //P(initializer_list),values = 77 5

如果没有function2,那么q和s就会拆开同时也能成功初始化,但是r由于其中有三个数则无法初始化

{}背后是initializer_list<>,后者背后是array

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/443994.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号