我有一个 C++ 类,它有四个私有(private) float 和一堆对这些数据进行操作的非静态公共(public)函数。
是否可以保证或有可能做到这四个 float 是连续的并且没有填充。这将使类的大小为四个 float ,它的地址将是第一个 float 的地址。
最佳答案
这取决于您的编译器。
您可以将 #pragma pack(1)
与例如MSVC和 gcc , 或 #pragma pack 1
与 aCC .
例如,假设MSVC
/gcc
:
#pragma pack(1)
class FourFloats
{
float f1, f2, f3, f4;
};
或者更好:
#pragma pack(push, 1)
class FourFloats
{
float f1, f2, f3, f4;
};
#pragma pack(pop)
这基本上禁用了填充并保证 floats
是连续的。但是,要确保您的类的大小实际上是 4 * sizeof(float)
,它不能有 vtbl。 , 这意味着 virtual members是禁区。
关于c++ - 类连续数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4177346/