为了确保C ++类型是POD,我必须遵循哪些规则?

时间:2012-11-05 07:31:14

标签: c++ inheritance compiler-construction standards pod

  

可能重复:
  What are POD types in C++?

     

What are Aggregates and PODs and how/why are they special?

我正在用C ++编写一个解释器,我想确保某些C ++数据类型具有可预测的布局,以便在通过解释代码访问它们时,特别是在使用反射时。因此,例如,我想确保第一个数据字段始终与对象的地址偏移零。现在,这对纯粹的POD类型来说是微不足道的。但是,我想知道,如果这也可以用于具有继承或具有构造函数的对象,只要我避免使用虚函数或多继承等明显的东西。是否合理地假设编译器将以与C编译器相同的方式布局这些类型,或者"未指定的行为"在C ++标准中我需要担心什么?

1 个答案:

答案 0 :(得分:3)

c ++ 11定义了standard layout

  

标准布局旨在捕捉第一个意图 - 使用与C中相同的布局创建某些内容

这就是你要找的东西。因此,您的检查应该是:

static_assert( std::is_standard_layout<A>::value, "not standard layout" );