3

持っている場合は、Visual Studio または gcc を使用する

#pragma pack(push, 16)

typedef std::map<uint32_t, uint32_t> MyIntMap;

#pragma pack(pop)

じゃあ後で:

#pragma pack(push, 8)

MyIntMap thisInstance;

#pragma pack(pop)

thisInstance の構造アライメントは? つまり、typedef されたテンプレート クラスの場合、pragma pack は typedef の場所または変数定義の場所で有効になりますか? 後者の場合、ファイル間で一貫したアラインメントを持つ型を取得するための良い回避策は何ですか?

4

1 に答える 1

5

あなたのコードでは、#pragma packは効果がありません。typedef などの周りではなく、構造体またはクラスの定義の周りで有効な場合にのみ、何かを行います。また、その変数定義の周りには何の影響もありません。

ここで使用法を確認できます: http://msdn.microsoft.com/en-us/library/2e70t5y1(v=VS.100).aspx

具体的には:

pack は、プラグマが表示された後の最初の構造体、共用体、またはクラスの宣言で有効になります。pack は定義に影響を与えません。

于 2011-11-10T05:56:08.227 に答える