这是关于 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 个访问说明符,但我找不到有关此的信息。
最佳答案
根据标准(9 Classes [class],强调我的):
A standard-layout class is a class that:
...
— has the same access control (Clause 11) for all non-static data members,
...
和
A POD struct is a non-union class that is both a trivial class and a standard-layout class, and ...
你的预感是正确的,因为 B.m1
和 B.m2
都是非静态的并且具有不同的访问控制。
关于c++ - 为什么这不是 POD?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29930982/