为什么这不是 POD
Why is this not a POD?
这是关于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 类 [类],强调我的):
标准布局类是具有以下特性的类:
。
— 对所有非静态数据成员具有相同的访问控制(第 11 条),
。
和
POD 结构是一个非联合类,它既是普通类又是标准布局类,并且......
您的预感是正确的,因为B.m1
和B.m2
都是非静态的,并且具有不同的访问控制。
相关文章:
- 为什么这不是解密
- OpenGL,为什么这不是一个立方体?
- 是否有必要使用 std::move?这不是已经是一个右值参考了吗?
- 如果这不是类的"复制构造函数",是否可以移动对象?
- 为什么这不是"调用隐式删除的'QQmlElement'的默认构造函数"中的默认构造函数
- 返回带或不带 *this 的变量的确切方式不同 |这不是关于*此指针|正确性
- 为什么这不是函数模板的部分专业化
- 观看文件夹和子文件夹以进行文件更改,这不是检测更改
- 如果这不是 boost::lockfree::d etail::freelist 中的错误,我在这里错过了什么
- 为什么这不是正确的生产者消费者模型以及当我使用 stl 队列时导致错误的原因
- 为什么这不是 POD
- Boost包括造成严重破坏 - 但这不是Boost的错
- 使用浮点值和铸造的算术运算的错误结果 - 差异很大,我想这不是准确值的情况(429497)?
- 为什么这不是内存泄漏?还是吗?删除不带虚拟析构函数的基类指针
- 为什么这不是C/C++中的一个无限循环
- 尽量减少c++中的重复代码,这不是一个简单的例子
- 为什么 gcc 4.8.1 给我">> should be > > within a nested templated list"错误?这不是在 C++11 中修复的吗?
- 为什么这不是一个常数表达式
- boost::any_cast(const any&) 使用 const_cast<> -- 这不是潜在的 UB 吗?
- C++ 这不是一个无用的内联声明吗?