15-1 聚合类型的定义

聚合类型的定义

C++ 17标准对聚合类型的定义做出了大幅修改:

  • 没有用户提供的构造函数

  • 没有私有和受保护的非静态数据成员

  • 没有虚函数

如果该类是从另一个类继承而来,对于基类,有额外的条件:

  • 必须是公有继承

  • 必须是非虚继承

注意:基类并非要求是聚合类型。

1. 判断聚合类型的方法

在标准库<type_traits>中,提供了一种对聚合类型的甄别方法:is_aggregate

#include <iostream>
#include <string>

class MyString : public std::string {};

int main()
{
std::cout << "std::is_aggregate_v<std::string> = "
<< std::is_aggregate_v<std::string> << std::endl;
std::cout << "std::is_aggregate_v<MyString> = "
<< std::is_aggregate_v<MyString> << std::endl;
}

注意:在上面的代码中,MyString是聚合类型,其基类std::string不是,但是不影响其派生类是聚合类型。