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