一. 傳統C++ 傳統 C++中,普通數組、沒有構造析構和虛函數的類或結構體都可以使用 {} 進行初始化,也就是我們所說的初始化列表。而對於類對象的初始化,要麼需要通過拷貝構造、要麼就需要使用 () 進行,不支持{}。 int arr[3] = { 1,2,3 }; // 列表初始化class Fo... ...
一. 傳統C++
傳統 C++中,普通數組、沒有構造析構和虛函數的類或結構體都可以使用 {} 進行初始化,也就是我們所說的初始化列表。
而對於類對象的初始化,要麼需要通過拷貝構造、要麼就需要使用 () 進行,不支持{}。
int
arr[3] = { 1,2,3 }; // 列表初始化 |
二. 初始化列表
為瞭解決上面的問題,C++11把初始化列表的概念綁定到了類型上,並將其稱之為 std::initializer_list 。
以下寫法在C++11中都是被允許的:
int
static_arr[5] = { 1, 2, 3, 4 }; |
C++11將初始化列表解釋成一個initializer_list<T>類型的變數(T是列表中元素的類型)。
它相當於一個只讀的容器,只有三個成員函數:size(),begin()和end()。
在上面這個例子中,我們用初始化列表為STL容器提供初值。
C++11為STL容器新增了一種構造函數,它可以接收一個initializer_list。
三. 應用
#include
<initializer_list>
// This header is required |