【发布时间】:2019-03-16 22:02:21
【问题描述】:
最近我读到了关于编译器对类中的成员进行重新排序的能力。来自 C++ 11 标准:
§ 9.2.13
[...] 未指定具有不同访问控制的非静态数据成员的分配顺序。
我想知道它在实践中的样子。主要编译器(我对 g++、clang 和 msvc 感兴趣)是否在某些情况下重新排序类成员?
如果不是,是否还有其他可能导致不同编译器(或使用不同编译器标志时)的对象布局不同的情况? 假设没有使用虚拟方法,因此没有创建 vtable。
【问题讨论】:
-
请注意,编译器供应商可以保持相同的顺序并且仍然在定义范围内。
-
是的,我从未遇到过会发生重新排序的情况。这就是我问的原因,以了解当前编译器是否有可能。
标签: c++ c++11 visual-c++ g++ clang++