繁体   English   中英

非聚合类可以是 POD 类吗 C++

[英]Can a non-aggregate class be a POD class C++

据我所知,如果一个类不是聚合,那么它肯定不是一个 POD。

但是在下面的代码中

#include <iostream>
#include <type_traits>

class NotAggregate2
{
  int x; //x is private by default and non-static 
};

int main()
{
    std::cout << std::boolalpha;
    std::cout << std::is_pod<NotAggregate2>::value << '\n';
    std::cout << std::is_aggregate <NotAggregate2>::value << '\n';
}

有输出:

true
false

NotAggregate2 不是聚合而是 POD 类型。

那么非聚合类可以是 POD 类吗?

在 C++11 之前,您是正确的: POD类型需要是聚合类型,而聚合类型又不能有私有的非静态数据成员。 然而,C++11 之后,POD 类型不再需要是聚合。 相反,它们只需要满足作为 标准布局类型的宽松要求,即只要求所有非静态数据成员具有相同的访问控制,不一定是公共的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM