1. 在C++98中,標准允許使用花括號{}來對數組元素進行統一的集合(列表)初始化操作,如:int buf[] = {0};int arr[] = {1,2,3,4,5,6,7,8}; 可是對於自定義的類型,卻是無法這樣去初始化的,比如STL標准模板庫中容器,使用的頻率非常之高,如vector,若要初始化其內容,則需要每次進行push_back 或使用迭代器去初始化,這是極其不便的。C++11 中,可以”列表初始化“方式來快速的初始化內置類型或STL中容器。
2.集合(列表)的初始化方式已經成為C++語言的一個基本功能,列表初始化的方式對:內置類型(int、float、double、char等)、數組、自定義的類、函數參數列表、STL標准模板庫等都是有效的。
int main(int argc,char **argv) { int arr[] = {1,2,3,4,5,6,7,8,9,10}; //c++98編譯通過 c++11編譯通過 int buf[]{11,22,33,44,55,66,77}; //c++98編譯失敗 vector<int> _vec= {10,20,30,40,50,60}; //c++98編譯失敗 //c++98編譯失敗 map<int,std::string> _map{{1,"lxg"},{2,"the answer"},{3,"hello world."}}; return 0; }
3. 初始化列表可以在花括號“{}”之前使用等號=,其效果與不帶等號的初始化相同。如:`int a{10}` 和 `int a = {10}`。 所以,自動化變量和全局變量的初始化在C++11中被豐富了。比如可以使用以下幾種方式來完成初始化操作: ① 等號“=” 加上賦值表達式(assignment_expression)。如:int a = 1+2. ② 等號“=”加上花括號{}的初始化列表。如:int b = {1+3}. ③ 圓括號式的表達式列表。如:int a(1+2). ④ 花括號{}的初始化列表。如:int a{1+3}. ③④兩種方式也可以 用new操作符中。比如:`int *p = new int(2); char *c = new char{'g'};`
4. 正如2.中所描述,列表初始化方式同樣也適用於自定義的類中。因為標准模板庫中容器對初始化類別的支持源自於 <initializer_list> 頭文件中<initializer_list 類模板的支持。因此,只需要在應用中#include <initializer_list> 頭文件,同時聲明一個以 initializer_list<T> 模板類為參數的構造函數。
————————————————
版權聲明:本文為CSDN博主「此處不歸牛頓管」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/lixiaogang_theanswer/article/details/82563961