聚合初始化


摘自時習之
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 。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM