c++ - 类连续数据

标签 c++ class

我有一个 C++ 类,它有四个私有(private) float 和一堆对这些数据进行操作的非静态公共(public)函数。

是否可以保证或有可能做到这四个 float 是连续的并且没有填充。这将使类的大小为四个 float ,它的地址将是第一个 float 的地址。

最佳答案

这取决于您的编译器。

您可以将 #pragma pack(1) 与例如MSVCgcc , 或 #pragma pack 1aCC .

例如,假设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/

相关文章:

c++ - 在C++中向动态 vector 添加 double 时的神秘减速

c++ - 编译 boost 文件系统的教程文件时遇到问题

c++ - 两个日期之间的月数 - 使用 boost 的日期

java - 正确定义java动态类加载

php - 调用还是实例化?

c# - 如何重新初始化或重置类的属性?

java - 从 JAR 文件导入安全类

c++ - SFINAE 和 sizeof 与 constexpr

c++ - 如何在 C++ 中调用 KeBugCheck 或 KeBugCheckEx

java - 如何在java中的方法内部使用类中的变量