在类上使用#pragma pack

Use of #pragma pack on a class

本文关键字:#pragma pack      更新时间:2023-10-16

我们可以在类之前使用#pragma pack()吗?

pragma在这里的意义是什么?我知道它用于向编译器提供有关实现的信息,但是如果我们将它与类一起使用呢?

它对类和对结构体具有完全相同的效果,影响数据成员的对齐。

实际上在类中使用它是非常不寻常的,几乎总是一个错误。c++类对象的布局很大程度上是由实现定义的。c++编译器通常会努力优化这种布局,在可能的情况下删除v-table指针。当类使用多重继承时,可能会添加一个。因此,对类声明进行微小的更改,例如使方法变为虚或添加基类,都可以显著地改变对象布局。这当然会破坏依赖于该pragma的代码。例如,序列化为二进制文件的对象将不再正确地反序列化。一般来说,这也是一种不好的做法,但无论如何总是会发生。