2017-05-31 69 views
0

我知道結構包裝是C++編程中的常見事情(至少在低內存系統上)。但是類怎麼樣? 我知道它的作品,因爲我想它C++類包裝/成員對齊

#include <iostream> 

#pragma pack(push, 1) 
class Test_Packed { 
    uint8_t t; 
    uint32_t test; 
}; 
#pragma pack(pop) 

class Test_Unpacked { 
    uint8_t t; 
    uint32_t test; 
}; 

int main() { 
    std::cout<<sizeof(Test_Packed) << "/" << sizeof(Test_Unpacked)<<std::endl; 
    return 0; 
} 

哪個正確輸出 「5/8」。

我可以假定這是所有符合的編譯器的情況,還是定義了此實現?

我知道添加虛擬成員(因此需要一個vtable)會在前面添加額外的數據。什麼可能是其他原因導致失敗?

除了在某些平臺上的糟糕表現,這會導致任何問題嗎?

+2

它的實現已定義。 –

回答

1

#pragma狀態的文檔:

實現定義的行爲是由#pragma指令控制。

所以效果,如果有的話,#pragma pack(push, 1)#pragma pack(pop)完全 「實施規定」。