聚合類
聚合類(aggregate classes)是一種特殊類型的類型,主要特徵是其成員可以直接使用大括號初始化器進行初始化 來看以下的例子吧
1
2
3
4
5
6
7
8
struct Point {
int x;
int y;
};
Point p{50,100};
上述這個簡單的 struct, 可以直接使用大括號進行初始化
Point p{50,100};
在 C++17 之前,聚合類必須滿足以下條件:
- 沒有用戶自定義的構造函數(包括默認構造函數)。
- 沒有私有或受保護的非靜態數據成員。
- 沒有虛擬函數。
- 沒有基類。 這些限制使得聚合類通常是簡單的數據結構,如結構體或類,限制很多啦!
C++17 放寬了聚合類的定義,允許以下條件:
- 可以有基類,只要基類也是聚合類且沒有私有或受保護的非靜態數據成員。(上述第四項)
- 可以有非靜態數據成員(包括對象和引用)。(上述第2項)
直接看 code
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <string>
class Base {
public:
int base_val;
};
class Derived : public Base {
public:
std::string derived_val;
};
執行結果 in C++14
執行結果 in C++17
好處
簡化初始化:使用聚合初始化使得代碼更簡潔! 就這樣!



