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

Tal*_*lin 6 c++ compiler-construction standards inheritance pod

可能重复:
C ++中的POD类型是什么?

什么是聚合和POD,它们为何/为什么特别?

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

BЈо*_*вић 3

c++11 定义了标准布局

标准布局旨在捕捉第一个意图——使用与 C 中相同的布局创建一些东西

这就是您正在寻找的。因此您的支票应该是:

static_assert( std::is_standard_layout<A>::value, "not standard layout" );
Run Code Online (Sandbox Code Playgroud)