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

What rules do I have to follow in order to ensure that a C++ type is POD?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
What are POD types in C++?

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

我正在用C++编写一个解释器,我想确保某些C++数据类型有一个可预测的布局,当它们通过解释代码访问时,尤其是在使用反射时。例如,我想确保第一个数据字段总是位于对象地址的偏移量零处。现在,这对于纯POD类型来说是微不足道的。不过,我想知道,只要我避免使用诸如虚拟函数或多重继承等明显的事情,这是否也可以用于具有继承或具有构造函数的对象。假设编译器会以C编译器的方式布局这些类型,或者C++中的"未指定的行为"是我需要担心的事情,这是合理的吗?


C++ 11定义了标准布局:

Standard layout is intended to capture the first intent -- creating something with a layout the same as you'd get in C

这就是你要找的。因此,您的支票应该是:

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