编译这个头文件:
// myheader.h
class MyClass {
MyClass();
~MyClass();
unsigned int mMyUint;
bool bMyBool;
std::string sMyString;
};
使用 Visual Studio 2010 /W4(有人告诉我这样做),目标 x64,给了我以下内容warning C4121:
'MyClass' : alignment of a member was sensitive to packing,指的是所在的行std::string sMyString。Microsoft的官方帮助建议使用 a #pragma pack(x),其中x1、2、4 取决于在其结构/类中使用的成员。
不,我想知道 std::string 使用哪种对齐方式?我的想法是 std::string 既不是编译器也不是平台独立的。有没有办法解决这个问题,特别是考虑到可能有任何其他结盟的其他成员?
最好是独立于编译器(甚至可移植)的解决方案。
更新:关于 jalf 提供的非常有用的答案:不,在这个文件中我没有使用#pragma pack(x). 我在另一个结构中使用了它,在该结构中我使用了在不使用#pragma pack(x). 现在我只是惊恐地陷入了同样的陷阱,因为我不知道 Microsoft 编译器是如何解析的std::string。