【问题标题】:Class members reordering类成员重新排序
【发布时间】:2019-03-16 22:02:21
【问题描述】:

最近我读到了关于编译器对类中的成员进行重新排序的能力。来自 C++ 11 标准:

§ 9.2.13

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

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

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

【问题讨论】:

  • 请注意,编译器供应商可以保持相同的顺序并且仍然在定义范围内。
  • 是的,我从未遇到过会发生重新排序的情况。这就是我问的原因,以了解当前编译器是否有可能。

标签: c++ c++11 visual-c++ g++ clang++


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多