类成员重新排序
Class members reordering
最近我读到了编译器在类中重新定义成员的能力。从 C++ 11 标准:
§ 9.2.13
[...]未指定具有不同访问控制的非静态数据成员的分配顺序。
我想知道它在实践中是什么样子的。主要的编译器(我对 g++、clang 和 msvc 感兴趣(是否在某些位置对类成员重新排序?
如果不是,是否还可能发生其他事情,导致不同编译器上的对象布局不同(或使用不同的编译器标志时(? 假设未使用虚拟方法,因此不会创建 vtable。
事实上,这个问题是没有意义的。确保类的布局符合您的期望的唯一符合标准的方法是确保类是标准布局类型 - 这将保证每个符合标准的编译器上的布局相同。
此类类型的要求之一是所有成员都具有相同的访问控制。
相关文章:
- 合并排序不排序自创建数组类 c++
- 使用 Key 对 C++ 中的哈希映射进行排序. 无法排序
- std::排序为排序自定义对象时出现的向量引发错误
- 队列快速排序不排序和打印随机字符串[C ]
- 插入排序中途排序
- C 排序无法排序一组字符串
- C 选择排序不排序
- 气泡排序不排序
- C++:使用 LSD 基数排序字符串排序崩溃
- C 样式的字符串排序与排序和 qsort
- C++ 快速排序不排序
- 如何对包含 pair<int,int> 元素的向量进行排序?排序是根据比较功能完成的
- Introsort(快速排序+堆排序)实现和复杂性
- 用于排序/操作/排序的最佳替代算法
- 没有严格弱排序的排序集
- STL:指针关联排序容器:排序谓词模板
- 排序和排序有什么区别?
- 寻找c++快速排序/插入排序组合中的错误
- 创建没有重复项的新排序向量
- 冒泡排序不排序最后一个数字与此算法