为什么一个具有多个公共访问说明器标准_layout的类

Why is a class with multiple public access specifiers standard_layout?

本文关键字:说明 访问 标准 的类 layout 一个 为什么      更新时间:2023-10-16

我只是在玩G ,我发现

#include <type_traits>
class Foo {
public: int x;
public: char y;
public: double z;
};
static_assert(std::is_standard_layout<Foo>::value, "Foo is not standard layout");
int main() {}

编译好的。

根据此答案,data members across access specifiers may be reordered in memory。因此,没有Gaurantee实际上是x实际上是Foo的第一个成员。我定义Foo的方式,y实际上可以是第一个元素吗?

我认为标准布局意味着您或多或少了解给定类型的字节如何布局。允许以任意方式重新排序标准布局类型的字段对我来说是违反直觉的。为什么允许?

您结构的所有成员都具有相同的访问说明符:public。关键字出现在每个班级成员都是无关紧要的事实。这相当于在所有类成员之前出现一次public访问说明符。