可能重复:
C++ 中的 POD 类型是什么?
我正在用 C++ 编写一个解释器,我想确保某些 C++ 数据类型在通过解释代码访问时具有可预测的布局,特别是在使用反射时。例如,我想确保第一个数据字段始终位于对象地址的偏移量零处。现在,这对于纯粹的 POD 类型来说是微不足道的。然而,我想知道这是否也适用于具有继承或构造函数的对象,只要我避免诸如虚拟函数或多重继承之类的明显的事情。假设编译器将以 C 编译器相同的方式布局这些类型是否合理,或者 C++ 标准中的“未指定行为”是我需要担心的事情吗?
c++11 定义了 标准布局 :
标准布局旨在捕捉第一个意图 - 创建具有与 C 中相同的布局的东西
这就是您正在寻找的。因此你的支票应该是:
static_assert( std::is_standard_layout<A>::value, "not standard layout" );