C++ #pragma包、模板typedefs和结构对齐
使用Visual Studio或gcc,如果我有C++ #pragma包、模板typedefs和结构对齐,c++,templates,visual-c++,gcc,memory-alignment,C++,Templates,Visual C++,Gcc,Memory Alignment,使用Visual Studio或gcc,如果我有 #pragma pack(push, 16) typedef std::map<uint32_t, uint32_t> MyIntMap; #pragma pack(pop) 此实例的结构对齐方式是什么?也就是说,对于typedef的模板类,pragma包是在typedef处生效还是在变量定义处生效?如果是后者,有什么好的解决方法可以使类型在文件之间保持一致的对齐?在您的代码中,#pragma pack将无效。它只在围绕结构或类
#pragma pack(push, 16)
typedef std::map<uint32_t, uint32_t> MyIntMap;
#pragma pack(pop)
此实例的结构对齐方式是什么?也就是说,对于typedef的模板类,pragma包是在typedef处生效还是在变量定义处生效?如果是后者,有什么好的解决方法可以使类型在文件之间保持一致的对齐?在您的代码中,#pragma pack
将无效。它只在围绕结构或类的定义有效时才执行任何操作,而不是围绕typedef或其他任何操作。它对变量定义也没有任何影响
您可以在此处查看用法:
具体而言:
pack在看到pragma后的第一个结构、联合或类声明时生效。pack对定义没有影响
只是出于好奇,那么转发声明呢?那么用这个pragma打包的类及其转发声明呢?我需要在那里重复pragma吗?@arne它对转发声明没有影响,只对类定义有影响。你可以在这里看到我的测试:
#pragma pack(push, 8)
MyIntMap thisInstance;
#pragma pack(pop)