类中使用 #pragma pack 的作用

3

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

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

1个回答

6
它对类的影响与它对结构体的影响完全相同,会影响数据成员的对齐方式。
实际上,在类上使用它非常不寻常,几乎总是一个错误。 C++ 类对象的布局高度依赖于实现。 C++ 编译器通常会努力优化该布局,在可以时删除 v 表指针,而在类使用多重继承时可能添加一个 v 表指针。 因此,对类声明进行微小更改,例如将方法设置为虚拟方法或添加基类,可能会显着改变对象布局。 然后,这当然会破坏依赖于该编译指示符的代码。 就像序列化为二进制文件的对象不再正确反序列化一样。 这通常也是一种不好的做法,但仍经常发生。 不要使用它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接