我正在玩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() {}
编译得很好。
根据this回答,data members across access specifiers may be reordered in memory
。所以x
实际上在Foo
实际上是在记忆中的第一个成员时,没有任何保证。我定义Foo
的方式,y
实际上可能是第一个元素吗?
我认为标准布局意味着您可以或多或少地了解如何为给定类型布置字节。允许以任意方式重新排序标准布局类型中的字段似乎违反直觉。为什么允许这样做?
答案 0 :(得分:3)
您的结构的所有成员都具有相同的访问说明符:public
。关键字出现在每个类成员之前的事实并不重要。这相当于在所有类成员之前出现一次的public
访问说明符。