个人网站的制作步骤,花生棒做网站,wordpress 登录小工具,做民宿的网站个人主页#xff1a;Lei宝啊
愿所有美好如期而遇 {} 初始化及std:initializer_list
一
这种初始化方式我们建议用第一种#xff0c;但是以后看见下面两种也不要感到疑惑#xff0c;是可以这样初始化的。
int main()
{int a 1;int b { 1 };int c{ 1 };return 0;
}
二…个人主页Lei宝啊
愿所有美好如期而遇 {} 初始化及std:initializer_list
一
这种初始化方式我们建议用第一种但是以后看见下面两种也不要感到疑惑是可以这样初始化的。
int main()
{int a 1;int b { 1 };int c{ 1 };return 0;
}
二
class Date
{
public:Date(){}Date(int year, int month, int day):_year(year),_month(month),_day(day){}private:size_t _year;size_t _month;size_t _day;};int main()
{Date a;Date b(1, 1, 1);Date c{ 1,1,1 };//多参数的隐式类型转换{1,1,1}构造一个Date类型的临时对象去拷贝构造d对象。Date d { 1,1,1 };return 0;
}
三
#include vector
using namespace std;int main()
{//与Date是不同的这里不是多参数隐式类型转换//是C11特性添加了initializer_list构造函数/*底层是这样的vector(initializer_listvalue_type il){for(auto e : il){*finish e;finish;}} */vectorint v { 1,2,3,4,5,6 };vectorint v{ 1,2,3,4,5,6 };return 0;
} initializer_list构造是这样的
{1,2,3}会被识别构造成initializer_list并且是唯一构造只有这么一种构造方式。 四
#include map
using namespace std;int main()
{mapstring, int m1;pairstring, int p;pairstring, int p1;//initializer_listpairconst string,intmapstring, int m2{ p, p1 };//initializer_listpairconst char*,int//{1,1}构造pair -- pairconst cha*, int/*templateT1, T2struct pair{pair(const T key, const T value):fisrt(key),second(value){}templateU, Vpair(pairconst U, V kv):first(kv.first),second(kv.second){}//使用const char*构造stringT1 first;T2 second;}*///这样再构造initializer_list再用这个对象拷贝构造mapstring, int m3{ {1,1},{2,2} };return 0;
} value_type在这里是pairconst Key, T类型 解释mapstring,int m2 {p1, p2}
p1和p2都是pairstring, int类型所以initializer_list中的value_type就是pairstring,int类型那么构造m2的就是iniializer_listpairstring,int。
解释mapstring, int m3{ {1,1},{2,2} };
initializer_list中的value_type就是{1,1}的类型使用它去构造一个pair那么pair的类型就是pairconst char*, int那么value_type就是这个类型也就是说我们使用initializer_listpairconst char*,int去构造m3而m3中pair的类型是pairstring,int无法直接构造所以使用了类模板将const char*构造成string。