据我所知,如果一个类不是一个聚合,那么它肯定不是一个POD
但是在下面的代码中
#包括<;iostream>;
#包括<;类型特征>;
类别2
{
int x;//x默认为私有且非静态
};
int main()
{
标准::cout<;<;标准::boolalpha;
标准::cout<;<;标准::is_pod<;NotAggregate2>;::value<;'\n';
标准::cout<;<;标准::是聚合<;NotAggregate2>;::值<;<;'\n';
}
它们有输出:
true
错误的
NotAggregate2不是聚合的,而是POD类型
那么,非聚合类是否可以是POD类呢
在C++11之前,您是正确的:POD类型需要是聚合类型,而聚合类型又不能有私有的非静态数据成员。然而,在C++11之后,POD类型不再需要聚合。相反,它们只需要满足作为标准布局类型的更宽松的要求,这只要求所有非静态数据成员具有相同的访问控制,而不一定是公共的