使用多重繼承時,MSVC 似乎禁用了空基類優化 (EBO/EBCO)。可悲的是,這意味著其他針對 windows 的編譯器也必須在這種情況下禁用 EBO。現在,MSVC 提供__declspec(empty_bases)了重新啟用它的功能,但是現在您必須將此屬性放在每個依賴 EBO 的類中。
有沒有辦法全域禁用這種行為?也就是說,是否有任何編譯器標志可以為專案重新啟用 EBO?
(我主要對使用 GNU 命令列的 clang 感興趣)。
uj5u.com熱心網友回復:
有沒有辦法全域禁用這種行為?
這將破壞 ABI 與平臺上任何 C 代碼宣告的每種型別的兼容性。包括來自標準庫或鏈接到的任何預編譯庫的代碼,以及任何 DLL 等。所以......不,沒有辦法做到這一點。
平臺 ABI,即使它們是錯誤的,也不是可選的。如果您想擁有一個不遵循平臺 ABI 規則的型別,則該型別的宣告中必須包含一些內容,以將其與那些遵循平臺 ABI 規則的型別區分開來。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/520671.html
標籤:C 视窗铛c 20
