Class 会员正在重新排序

Class members reordering

最近我读到有关编译器能够重新排序 class 中的成员的信息。来自 C++ 11 标准:

§ 9.2.13

[...] The order of allocation of non-static data members with different access control is unspecified.

我想知道实际情况如何。主要编译器(我对 g++、clang 和 msvc 感兴趣)是否在某些情况下对 class 成员重新排序?

如果不是,是否还有其他可能导致不同编译器(或使用不同编译器标志)上的对象布局不同的情况? 假设没有使用虚拟方法,因此没有创建 vtable。

这个问题实际上没有实际意义。确保 class 的布局符合您的期望的唯一符合标准的方法是确保 class 是 Standard Layout Type - 这将保证每个符合标准的编译器上的布局相同。

这种类型的要求之一是所有成员都具有相同的访问控制。