一、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 << " " &

本文探讨C++17中的聚合初始化。在C++17中,聚合定义有所更新,允许直接使用大括号进行初始化,无需显式构造函数。文章通过实例比较了不同初始化方式,并讨论了与`static_cast`的关系及向前兼容性问题。
最低0.47元/天 解锁文章
295

被折叠的 条评论
为什么被折叠?



