C++ 类成员重新排序
最近我读到了关于编译器在类中重新排序成员的能力。从C++ 11标准: §9.2.13 […]未指定具有不同访问控制的非静态数据成员的分配顺序 我想知道它在实践中是什么样子的。在某些情况下,主要的编译器(我对g++、clang和msvc感兴趣)是否会对类成员进行重新排序 如果没有,是否还有其他可能导致不同编译器上不同对象布局(或使用不同编译器标志时)的情况?C++ 类成员重新排序,c++,c++11,visual-c++,g++,clang++,C++,C++11,Visual C++,G++,Clang++,最近我读到了关于编译器在类中重新排序成员的能力。从C++ 11标准: §9.2.13 […]未指定具有不同访问控制的非静态数据成员的分配顺序 我想知道它在实践中是什么样子的。在某些情况下,主要的编译器(我对g++、clang和msvc感兴趣)是否会对类成员进行重新排序 如果没有,是否还有其他可能导致不同编译器上不同对象布局(或使用不同编译器标志时)的情况? 假设没有使用虚拟方法,因此没有创建vtable。事实上,这个问题没有实际意义。确保类的布局符合您的期望的唯一标准兼容方法是确保类是-并且这将
假设没有使用虚拟方法,因此没有创建vtable。事实上,这个问题没有实际意义。确保类的布局符合您的期望的唯一标准兼容方法是确保类是-并且这将保证每个符合编译器上的布局相同
这种类型的要求之一是所有成员都具有相同的访问控制。事实上,这个问题没有实际意义。确保类的布局符合您的期望的唯一标准兼容方法是确保类是-并且这将保证每个符合编译器上的布局相同
这种类型的一个要求是所有成员都具有相同的访问控制。请注意,编译器供应商可以保持相同的顺序,并且仍然在定义范围内。是的,我从未遇到过重新排序的情况。这就是为什么我想知道,在当前的编译器中,这是否可能。请注意,编译器供应商可以保持相同的顺序,并且仍然在定义范围内。是的,我从未遇到过会发生重新排序的情况。这就是为什么我要问,要知道在当前的编译器中它是否可能。