標籤:stream zed 成員 return amp for tor color size
C++11對原有的初始化列表(用花括弧圍住的若干個值)進行了大幅的擴充。以下寫法在C++11中都是被允許的:
1 int static_arr[5] = {1, 2, 3, 4}; // static_arr[4] is not initialized here 2 int static_arr2[] {1, 2, 3, 4}; // operator = can be omitted 3 4 int* dynamic_arr = new int[5] {1, 2, 3, 4}; 5 // dynamic_arr[4] is not initialized here 6 7 vector<int> stl_vec {1, 2, 3, 4}; 8 set<int> stl_set {1, 2, 3, 3}; 9 cout << stl_set.size() << endl; // 310 11 map<const char*, int> stl_map {12 {"Alice", 1},13 {"Bob", 2},14 {"Cindy", 3}15 };
C++11將初始化列表解釋成一個initializer_list<T>類型的變數(T是列表中元素的類型)。它相當於一個唯讀容器,只有三個成員函數:size(),begin()和end()。
在上面這個例子中,我們用初始化列表為STL容器提供初值。C++11為STL容器新增了一種建構函式,它可以接收一個initializer_list。
initializer_list也可以像其他類型的變數一樣,在語句中被建立,或者用作函數(包括類的建構函式)的參數:
1 #include <initializer_list> // This header is required 2 #include <iostream> 3 4 using namespace std; 5 6 template <class Tp> 7 void print_ilist(const initializer_list<Tp> &ilist) 8 { 9 for (auto it = ilist.begin(); it != ilist.end(); ++it)10 cout << *it << endl;11 }12 13 struct Foo14 {15 int vals[10];16 int n = 0;17 18 Foo (const initializer_list<int> &ilist) {19 for (int v: ilist)20 vals[n++] = v;21 }22 };23 24 int main()25 {26 initializer_list<int> empty_ilist;27 empty_ilist = {1, 2, 3, 4};28 cout << empty_ilist.size() << endl; // 429 30 Foo foo {1, 2, 3};31 Foo bar (empty_ilist);32 cout << "bar.n = " << bar.n << endl; // 433 34 initializer_list<float> float_ilist {1.0, 1.2, 1.5, 2.0};35 print_ilist(float_ilist);36 print_ilist( {"Reimu", "Marisa", "Sanae", "Reisen"} );37 return 0;38 }
C++11 初始化列表(initializer_list)