0

我只是在玩 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。因此,没有任何保证实际上必须是实际布置在内存x中的第一个成员。Foo我定义的方式Fooy实际上可能是第一个元素,对吗?

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

4

1 回答 1

3

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

于 2016-12-07T03:50:54.307 回答