非聚合类是否是C++类的POD类

据我所知,如果一个类不是一个聚合,那么它肯定不是一个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类型不再需要聚合。相反,它们只需要满足作为标准布局类型的更宽松的要求,这只要求所有非静态数据成员具有相同的访问控制,而不一定是公共的

发表评论