3

我们可以在上课前使用#pragma pack() 吗?

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

4

1 回答 1

5

它对类的影响与对结构的影响 完全相同,都会影响数据成员的对齐方式。

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

于 2013-05-29T10:40:16.350 回答