为什么这不是POD?

时间:2015-04-28 22:20:31

标签: c++ data-structures

这是关于std::is_pod,它会检测模板是否是普通旧数据类型

请参阅以下代码:

struct A {
public:
    int m1;
    int m2;
};

struct B {
public:
    int m1;
private:
    int m2;
};

struct C {
private:
    int m1;
    int m2;
};

int main()
{
    std::cout << std::boolalpha;
    std::cout << std::is_pod<A>::value << '\n'; // true
    std::cout << std::is_pod<B>::value << '\n'; // false
    std::cout << std::is_pod<C>::value << '\n'; // true
}

这3个结构对我来说都像POD。但显然struct B不是。 我不明白为什么。对我来说,他们都有一个简单的构造函数,移动和复制操作符。析构函数当然也是微不足道的。

我责备它使用2个访问说明符,但我找不到相关的信息。

1 个答案:

答案 0 :(得分:31)

根据标准( 9 Classes [class] ,强调我的):

  

标准布局类是一个类:

     

...

     

- 具有相同的访问控制 (第11条) 适用于所有非静态数据成员 ,< / p>      

...

  

POD结构是一个非联合类,它既是一个简单的类,又是 一个标准布局类 ,并且......

您的预感是正确的,因为B.m1B.m2都是非静态的并且具有不同的访问控制。