一、C++17中聚合的定义
1、任意数组都被称为聚合。
2、具有以下特点的类、结构体或者是共用体:
-没有用户声明的构造函数或者被explict修饰的构造函数。
-没有using Base::Base()这种的构造函数。
struct Data{
};
struct D: public Data{
using Data::Data;
};
-没有private、protected的非静态数据成员。
-没有虚函数。
-没有virtual、private、protected的基类。
C++ 17提供了std::is_aggregate<T>::value 来判断T类型是否是聚合结构(value == True 为聚合)。或者使用辅助函数std::is_aggregate_v<T>来判断。
二、聚合的初始化
struct B{
int i = 1;
std::string str = "Hello Aggregate";
};
struct D: public B{
double d = 10;
};
int main(){
//聚合初始化。
D d{
{100, "Hello World."}, 1};
std::cout << d.i << " " << d.str << " " << d.d << std::endl;