为了确保C 类型是POD,我必须遵循什么规则
What rules do I have to follow in order to ensure that a C++ type is POD?
可能的重复:
C 中的POD类型是什么?什么是聚集体和豆荚,以及它们如何/为什么特别?
我正在用C 编写解释器,我想确保某些C 数据类型通过解释的代码访问时具有可预测的布局,尤其是在使用反射时。因此,例如,我想确保第一个数据字段始终是从对象地址的偏移零。现在,对于纯POD类型来说,这是微不足道的。但是,我想知道,只要我避免使用虚拟函数或多个继承等明显的事情,这是否也可以与具有继承或具有构造函数的对象一起使用。假设编译器将与C编译器相同的方式进行布局是合理的,或者"未指定的行为"是合理的。在C 标准中,我需要担心?
c 11定义标准布局:
标准布局旨在捕获第一个意图 - 创建与您在C
中相同的布局的东西
这就是您要寻找的。因此您的支票应为:
static_assert( std::is_standard_layout<A>::value, "not standard layout" );
相关文章:
- 为什么此指针值不能转换为整数的规则是什么?
- 指针算术规则中的"possibly-hypothetical"是什么意思?
- 假设声明中某些上下文中需要的名称查找规则是什么
- 在 C++20 中对概念约束函数进行排序的规则是什么?
- 朋友声明的复杂范围界定规则有什么意义?
- 模板模板参数:以下示例中应用了什么规则
- 自动参数捕获的扣除规则是什么?
- 高完整性C++规则7.2.1的基本原理是什么
- c++ 17 中结构自动定义构造函数的规则是什么?
- 在 Objective-C++ 中应用于__weak指针时,通过关键字推导类型"auto"规则是什么?
- 在平等符号左侧使用RVALUE参考的规则是什么?
- 有什么方法可以在 GNU Make 中使用变量作为规则和先决条件?
- 类静态变量初始化的规则是什么?
- 初始化中的模板转换运算符类型推导规则是什么?
- 将临时值存储为某种数据类型时,算术运算的标准规则是什么
- c++空间中的运算符,有什么规则
- 关于实施其中之一的CPP,这三个规则究竟是什么?
- 使用“void”来专门化模板的规则是什么?
- 对于C++,在另一个函数中定义一个函数的可行性规则是什么?
- 有人能解释一下最多一次不变和存在、所有权和守恒规则是什么吗?