为了确保C 类型是POD,我必须遵循什么规则

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

本文关键字:规则 什么 确保 类型 POD      更新时间:2023-10-16

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

什么是聚集体和豆荚,以及它们如何/为什么特别?

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

c 11定义标准布局:

标准布局旨在捕获第一个意图 - 创建与您在C

中相同的布局的东西

这就是您要寻找的。因此您的支票应为:

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