编译这个头文件:
// 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)
,其中x
1、2、4 取决于在其结构/类中使用的成员。
不,我想知道 std::string 使用哪种对齐方式?我的想法是 std::string 既不是编译器也不是平台独立的。有没有办法解决这个问题,特别是考虑到可能有任何其他结盟的其他成员?
最好是独立于编译器(甚至可移植)的解决方案。
更新:关于 jalf 提供的非常有用的答案:不,在这个文件中我没有使用#pragma pack(x)
. 我在另一个结构中使用了它,在该结构中我使用了在不使用#pragma pack(x)
. 现在我只是惊恐地陷入了同样的陷阱,因为我不知道 Microsoft 编译器是如何解析的std::string
。