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 - 这将保证每个符合标准的编译器上的布局相同。
这种类型的要求之一是所有成员都具有相同的访问控制。
最近我读到有关编译器能够重新排序 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 - 这将保证每个符合标准的编译器上的布局相同。
这种类型的要求之一是所有成员都具有相同的访问控制。