类成员重新排序

Class members reordering

本文关键字:排序 新排序 成员      更新时间:2023-10-16

最近我读到了编译器在类中重新定义成员的能力。从 C++ 11 标准:

§ 9.2.13

[...]未指定具有不同访问控制的非静态数据成员的分配顺序。

我想知道它在实践中是什么样子的。主要的编译器(我对 g++、clang 和 msvc 感兴趣(是否在某些位置对类成员重新排序?

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

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

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