引子
C++11,是繼C++98后的一次有力更新,引進了很多好用的語法,STL也添加了幾個新容器,也解決了很多的問題。本篇博客就學(xué)習(xí)一下C++11列表初始化
的新語法和 initializer_list
一. 列表初始化
在C++類和對象中,類的構(gòu)造函數(shù)有初始化列表,而我們今天要學(xué)習(xí)的是列表初始化,二者名字相近,但是是兩個不一樣的語法。
我們需要一個Date類介紹相關(guān)語法
class Date
{
public:
//有參構(gòu)造
Date(int year, int month, int day)
:_year(year)
,_month(month)
,_day(day)
{}
//打印
void Print()
{
cout << _year << "-" << _month << "-" << _day << endl;
}
private:
int _year;
int _month;
int _day;
};
在以往,我們給一個變量賦值,或者給一個自定義類型初始化,我們是這么做的
而C++11,提供了列表初始化
,即使用 { } 初始化數(shù)據(jù)
,如下:
但是底層并沒有那么神奇。我們知道為了適應(yīng)面向?qū)ο螅鋵岰++的基本數(shù)據(jù)類型,比如int,double,其實都有構(gòu)造函數(shù),也有匿名對象。而列表初始化其實就是調(diào)用該類型的構(gòu)造函數(shù)而已。
我們在日期類的構(gòu)造函數(shù)加上一句打印的代碼
//有參構(gòu)造
Date(int year, int month, int day)
:_year(year)
,_month(month)
,_day(day)
{
cout << "Date類的構(gòu)造函數(shù)" << endl;
}
再執(zhí)行程序,運行結(jié)果如下:
而STL中的容器也同樣支持使用 { } 初始化
這是如何實現(xiàn)的呢?
其實是通過C++11新加入的 initializer_list
實現(xiàn)的
二. initializer_list
initializer_list是C++11提供的一種新類型
C++11會將 { } 括起來的內(nèi)容識別為常量數(shù)組,然后構(gòu)造成 initializer_list
三者其實是等價的。
同時因為是常量數(shù)組,所以內(nèi)容不允許修改
但是vector等容器是如何支持構(gòu)造的呢?
其實是都增加了一個支持 initializer_list 的構(gòu)造函數(shù)
map支持如下構(gòu)造
map<string, string>dict = { {"sort","排序"},{"string","字符串"},{"delete","刪除"} };
結(jié)束語
本篇內(nèi)容到此就結(jié)束了,感謝你的閱讀!文章來源:http://www.zghlxwxcb.cn/news/detail-461020.html
如果有補充或者糾正的地方,歡迎評論區(qū)補充,糾錯。如果覺得本篇文章對你有所幫助的話,不妨點個贊支持一下博主,拜托啦,這對我真的很重要。文章來源地址http://www.zghlxwxcb.cn/news/detail-461020.html
到了這里,關(guān)于C++11 列表初始化&initializer_list的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!