摘自時習之
C++標准庫中提供兩個容器表示數組這個概念:array表示靜態數組,vector表示動態數組 。這兩個類型都可以使用列表初始化(list initilization)來初始化。
std::array<int, 5> = {1, 2, 3, 4, 5};
std::vector<int> = {1, 2, 3, 4, 5};
這實際上是聚合初始化。
聚合初始化其實由來已久,在C語言中就存在了。
int array[5] = {1, 2, 3, 4, 5};
在C++中對於聚合體(aggregate)的初始化稱為聚合初始化,可以使用上面這種語法。 有兩種類型的對象被稱為聚合體:
- 數組類型
- 滿足下列條件的類類型(通常是結構體(struct)或者聯合體(union)):
- 沒有私有或保護的非靜態數據成員
- 沒有用戶提供的構造函數
- 沒有基類
- 沒有虛函數
所以說下面這個結構體的對象可以使用聚合初始化:
struct Aggregate {
int i;
int j;
};
Aggregate aggr = {1, 2};
上面這些都沒什么神奇的,真正神奇的是如果你的聚合體中間有嵌套,你可以不用使用花 括號分割:
struct Aggregate {
int arr[4];
int j;
};
Aggregate aggr = {1, 2, 3, 4, 5};
在上面這個初始化中,arr 成員會得到{1, 2, 3, 4}, 而 j 成員會初始化成 5 。