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

问题描述 投票:0回答:1

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

什么是聚合和 POD,它们有何特别之处/为何如此特别?

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

c++ inheritance
1个回答
3
投票

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

标准布局旨在捕捉第一个意图 - 创建具有与 C 中相同的布局的东西

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

static_assert( std::is_standard_layout<A>::value, "not standard layout" );
© www.soinside.com 2019 - 2024. All rights reserved.