2013-05-29 67 views
3

我們可以在類之前使用#pragma pack()嗎?使用類#pragma pack

這裏的編譯指示的意義是什麼?我知道它用於向編譯器提供有關實現的信息,但如果我們將它與類一起使用呢?

回答

6

它具有確切對類的影響與對結構的影響相同,影響數據成員的對齊。

實際上在班上使用它非常不尋常,幾乎總是一個錯誤。 C++類對象的佈局是嚴格定義的。 C++編譯器通常會努力優化該佈局,並在可能時刪除v-table指針。當類使用多重繼承時可能會添加一個。因此,對類聲明稍作修改,如製作方法虛擬或添加基類可以顯着改變對象佈局。這當然會破壞依賴於該編譯指示的代碼。就像序列化爲二進制文件的對象不會正確反序列化一樣。總的來說,也是一種不好的做法,但無論如何總是發生。不要使用它。

相關問題