CPP11-初始化列表

在CPP11之前的不同對象都有各自的初始化方式秫舌,于是初始化列表特性的目的在于統(tǒng)一初始化環(huán)節(jié)

統(tǒng)一初始化

提供了基本類型、數(shù)組谣辞、自定義類型等不同對象的初始化

class Student
{
public:
    Student(string name, int age) 
        : m_name(name), m_age(age) {
        cout << __FUNCTION__ << endl;
    }
private:
    string m_name;
    int m_age;
};

Student s1("Jeson", 18);    // 傳統(tǒng)方式
Student s2{ "Mark", 18 };   // 初始化列表

int a1 {10};
int a2 = {10};
int * arr = new int[4]{ 0, 2, 4, 5 };

<font color=red>注意事項(xiàng):自定義類型是盡量實(shí)現(xiàn)對應(yīng)的構(gòu)造函數(shù)甸私,雖然初始化列表支持使用默認(rèn)構(gòu)造按照聲明順序進(jìn)行初始化欧芽,但是從開發(fā)規(guī)范的角度來說,這種方式容易產(chǎn)生隱藏bug朴摊,不易排查</font>

struct Student
{
    string m_name;
    int m_age;
};

Student s1{ "Jeson", 18 };    // 編譯通過; s1.m_name == Jeson ; s1.m_age == 18
Student s2{ 18, "Jeson" };    // 編譯不通過

類型安全

初始化列表可以防止"縮窄"的隱式類型轉(zhuǎn)換默垄,對于小到大的則不做限制

int a1 = 3.14;   // 編譯通過
int a2 = {3.14}; // 編譯不過,vs2017報(bào)錯(cuò)(error C2397: 從“double”轉(zhuǎn)換到“int”需要收縮轉(zhuǎn)換)

double b1 = 3;   // 編譯通過
double b2 = {3}; // 編譯通過

初始化模板類-std::initializer_list

cpp11提供了std::initializer_list模板類甚纲,可將其作為構(gòu)造函數(shù)的參數(shù)口锭,如果類有接受initializer_list作為參數(shù)的構(gòu)造函數(shù),則初始化列表語法就只能用于該構(gòu)造函數(shù)。

class A
{
public:
    A(std::initializer_list<int> list) {
        cout << "A(std::initializer_list<int> list)" << endl;
    }
    A(int a, int b) {
        cout << "A(int a, int b)" << endl;
    }
};

A a1{ 1, 2 };    // A(std::initializer_list<int> list)
A a2(1, 2);      // A(int a, int b)

參考

  • 《C++ Primer Plus(第6版)中文版》
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鹃操,一起剝皮案震驚了整個(gè)濱河市韭寸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌荆隘,老刑警劉巖恩伺,帶你破解...
    沈念sama閱讀 212,542評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異椰拒,居然都是意外死亡晶渠,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門燃观,熙熙樓的掌柜王于貴愁眉苦臉地迎上來褒脯,“玉大人,你說我怎么就攤上這事缆毁》ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 158,021評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵脊框,是天一觀的道長颁督。 經(jīng)常有香客問我,道長缚陷,這世上最難降的妖魔是什么适篙? 我笑而不...
    開封第一講書人閱讀 56,682評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮箫爷,結(jié)果婚禮上嚷节,老公的妹妹穿的比我還像新娘。我一直安慰自己虎锚,他們只是感情好硫痰,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著窜护,像睡著了一般效斑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上柱徙,一...
    開封第一講書人閱讀 49,985評(píng)論 1 291
  • 那天缓屠,我揣著相機(jī)與錄音,去河邊找鬼护侮。 笑死敌完,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的羊初。 我是一名探鬼主播滨溉,決...
    沈念sama閱讀 39,107評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了晦攒?” 一聲冷哼從身側(cè)響起闽撤,我...
    開封第一講書人閱讀 37,845評(píng)論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎脯颜,沒想到半個(gè)月后哟旗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,299評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡伐脖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評(píng)論 2 327
  • 正文 我和宋清朗相戀三年热幔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片讼庇。...
    茶點(diǎn)故事閱讀 38,747評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡绎巨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蠕啄,到底是詐尸還是另有隱情场勤,我是刑警寧澤,帶...
    沈念sama閱讀 34,441評(píng)論 4 333
  • 正文 年R本政府宣布歼跟,位于F島的核電站和媳,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏哈街。R本人自食惡果不足惜留瞳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望骚秦。 院中可真熱鬧她倘,春花似錦、人聲如沸作箍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽胞得。三九已至荧止,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間阶剑,已是汗流浹背跃巡。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評(píng)論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留牧愁,地道東北人瓷炮。 一個(gè)月前我還...
    沈念sama閱讀 46,545評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像递宅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容

  • C++11新增了列表初始化的概念办龄。 在C++11中可以直接在變量名后面加上初始化列表來進(jìn)行對象的初始化烘绽。 列表初始...
    this_is_for_u閱讀 445評(píng)論 0 0
  • 有朋友在使用std::array時(shí)發(fā)現(xiàn)一個(gè)奇怪的問題:當(dāng)元素類型是復(fù)合類型時(shí),編譯通不過俐填。 struct S { ...
    金色888閱讀 396評(píng)論 0 0
  • 標(biāo)準(zhǔn)模板庫中容器對初始化列表的支持源自 這個(gè)頭文件中initialize_list類模板的支持安接。程序員只要#inc...
    i_need_job閱讀 73評(píng)論 0 1
  • 1 初始化列表 C++98/03中可以使用初始化列表對普通數(shù)組、POD類型等進(jìn)行初始化英融。如: 但是這種初始化方式的...
    georgeguo閱讀 1,384評(píng)論 0 1
  • 對于類對象的初始化盏檐,可以使用傳統(tǒng)的構(gòu)造方式(使用圓括號(hào)),也可以使用列表初始化(使用花括號(hào))。 假設(shè)有如下類的定義...
    shelldon1024閱讀 171評(píng)論 0 0