Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 类成员重新排序_C++_C++11_Visual C++_G++_Clang++ - Fatal编程技术网

C++ 类成员重新排序

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

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

§9.2.13

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

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

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

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


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

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


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

请注意,编译器供应商可以保持相同的顺序,并且仍然在定义范围内。是的,我从未遇到过重新排序的情况。这就是为什么我想知道,在当前的编译器中,这是否可能。请注意,编译器供应商可以保持相同的顺序,并且仍然在定义范围内。是的,我从未遇到过会发生重新排序的情况。这就是为什么我要问,要知道在当前的编译器中它是否可能。