我已經使用打包的模板類。據this我應該使用#pragma袋包裹在這個例子:如何打包模板課程?
#include <iostream>
#pragma pack(1)
template<typename X>
struct S {
int a;
X b;
};
#pragma pack()
int main()
{
std::cout << sizeof(S<char>) << "\n";
}
我centOS6,節目輸出8,這意味着包(1)沒有工作使用gcc-4.4.7。然後我試圖將main()更改爲:
int main()
{
std::cout << sizeof(S<char>) << "\n";
#pragma pack(1)
std::cout << sizeof(S<char>) << "\n";
#pragma pack()
}
令人驚訝的是,它仍然無法正常工作。如果我註釋掉main()中的第一行,那麼它就起作用了。所以我的問題是如何在模板類實例化上使用pack?無論如何,在同一個程序中同時使用打包和解包模板類嗎?
更新:如果我使用gcc-5.2.1,那麼它輸出5正確。另外對於下面的程序,我得到相反的結果(5用gcc-4.4.7和8 5.2.1):
template<typename X>
struct S {
int a;
X b;
};
int main()
{
#pragma pack(1)
std::cout << sizeof(S<char>) << "\n";
#pragma pack()
}
爲什麼GCC-4.4.7和5.2.1行爲不同?哪一個是正確的?無論如何要用不同版本的gcc獲得一致的結果嗎?
我嘗試用gcc 6.1.1代碼輸出是5. –