在类上使用#pragma pack

时间:2013-05-29 07:11:33

标签: c++ class pragma

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

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

1 个答案:

答案 0 :(得分:6)

它对类的影响与对结构的影响相同精确,影响数据成员的对齐。

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

相关问题