c++ - 为什么这不是 POD?

标签 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 个访问说明符,但我找不到有关此的信息。

最佳答案

根据标准(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.m1B.m2 都是非静态的并且具有不同的访问控制。

关于c++ - 为什么这不是 POD?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29930982/

相关文章:

algorithm - 范围最小查询、动态数组、区间树、treap

c++ - 错误 : cannot convert parameters from 'int [10]' to 'int'

c++ - C++中的rand()和srand()函数

c++ - 在 Intel Compiler-FASM 中内联汇编?

android - Unity 中的 native Android 库抛出 DllNotFound 异常

C++ operator-comma/forward 引用代码不编译

c++ - 将文本文件读入矩阵

javascript - 堆栈和队列 - Javascript - 实现和工作设置示例的方法?

database - 写优化、无锁、日志结构的索引?

algorithm - 用于查找自由树中两个节点之间最长距离的线性时间算法?