🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 概念 **POD 是 Plain Old Data 的缩写**,是 C++ 定义的一类数据结构概念,比如 int、float 等都是 POD 类型的。Plain 代表它是一个普通类型,Old 代表它是旧的,与几十年前的 C 语言兼容,那么就意味着可以使用 memcpy() 这种最原始的函数进行操作。两个系统进行交换数据,如果没有办法对数据进行语义检查和解释,那就只能以非常底层的数据形式进行交互,而拥有 POD 特征的类或者结构体通过二进制拷贝后依然能保持数据结构不变。 **也就是说,能用 C 的 memcpy() 等函数进行操作的类、结构体就是 POD 类型的数据**。 ## **POD的特征** 是不是 POD 类型的,可以用 is\_pod::value 来判断。那什么样的类、结构体是拥有 POD 特性的呢?要求有两个:一个是它必须很平凡、很普通;另一个是布局有序。 * 不能写**构造/析构函数**、**拷贝/移动构造函数**、**拷贝/移动运算符**,而是用编译器自动为我们生成,那这个数据就是“平凡的”。非要写的话,用 C++ 11 的 default 关键字。例如下列代码用 std::is\_trivial::value 来判断是否“平凡”。 * 不能有**虚函数**和**虚基类**。只要满足以上条件,就是拥有平凡特征的数据类型。 **布局要有序** 除了平凡之外,还对布局有要求。为了便于理解讲述,我们把非静态数据称为普通数据。 * **普通成员有相同的访问级别**。例如下面的类,因为 a 和 b 的访问级别不一样,所以布局无序,自然就不是 POD 类型的数据。当然,如果 b 写成 static int b,例子中的 A 类就是 POD 类型的了。所以一定要看清每个字,是“普通成员”哦。 * **第一个成员必须是自己的** * **只要有父类,普通成员只能在其中一个类中,不可分散** *