在类上使用#pragma pack

Sat*_*mar 3 c++ class pragma

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

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

Han*_*ant 6

它对类的影响与对结构的影响完全相同,影响数据成员的对齐.

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