这是关于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个访问说明符,但我找不到相关的信息。
答案 0 :(得分:31)
根据标准( 9 Classes [class] ,强调我的):
标准布局类是一个类:
...
- 具有相同的访问控制 (第11条) 适用于所有非静态数据成员 ,< / p>
...
和
POD结构是一个非联合类,它既是一个简单的类,又是 一个标准布局类 ,并且......
您的预感是正确的,因为B.m1
和B.m2
都是非静态的并且具有不同的访问控制。