具有私有成员的普通旧数据类型?

Pra*_*rav 5 c++ pod c++11

Demo是C++ 03中的POD类型吗?

struct Demo
{
     private:
       int x;
       int y;
};
Run Code Online (Sandbox Code Playgroud)

C++ 03,§9p4:

POD结构是一个聚合类,它没有非POD结构类型的非静态数据成员,非POD联合(或此类类型的数组)或引用,并且没有用户定义的副本赋值运算符,也没有用户定义的析构函数.

在阅读了Steve Jessop的帖子之后,我相信Demo是一个非POD因为成员是私人的.但是,标准没有说明POD类型和访问修饰符之间的关系.

在C++中,0x Demo是POD,因为§9p9(n3126)说:

POD结构是一个既简单类又是标准布局类的类,并且没有非POD结构类型的非静态数据成员,非POD联合(或此类类型的数组).

演示是微不足道的1以及标准布局类,所以它是一个POD.我的解释是否正确?

1一个普通的类是一个具有普通默认构造函数(12.1)并且可以轻易复制的类.[9p5,n3126]

Jer*_*fin 13

在C++ 03中,它绝对不是 POD.根据§9/ 4," POD结构是一个聚合类...",并根据§8.5.1/ 1:

骨料是没有用户声明的构造的阵列或一个类(第9节)(12.1),无私有或保护非静态数据成员(第11),没有基类(第10节),并且没有虚拟功能(10.3 )".

在C++ 0x下,至少从N3090/3092开始,我相信它一个POD.这些只要求所有非静态成员具有相同的访问权限,而不是访问必须是公共的.这是为了解决我认为我是第一个指出的问题 - 在C++ 98/03中,一个空的访问说明符导致了一个问题:

struct x { 
    int a;
public:
    int b;
public:
   int c;
};
Run Code Online (Sandbox Code Playgroud)

这符合POD结构的要求 - 但由于干预访问说明符,标准仍然允许交换bc交换的相对位置.因此,作为POD结构不提供旨在确保与C结构兼容的布局保证(对于明显的示例).

  • @Prasoon:它可能不像"议论"那么"聪明".当"每个人都知道"某事是真的时,我几乎想要证明他们是错的几乎是自动的.我试图控制这种趋势,但...... (4认同)