2011-04-20 171 views
5

假設我在C++中編寫了一個DLL,並想導出一個採用std :: vector參數的方法。我希望在不同的STL版本之間有任何二進制兼容性嗎?STL容器的二進制兼容性

+5

您甚至不希望在具有不同編譯器標誌的STL版本中使用二進制兼容性。 – 2011-04-20 21:02:06

回答

3

如果您的意思是包含在同一個編譯器的更新版本中的版本,是的,它可以(並且將會)在某些情況下工作,但是您必須小心。還有一些特殊情況,例如Windows上的英特爾和微軟編譯器 - 英特爾非常謹慎地維護二進制兼容性,至少在我嘗試過時,它總是很好地工作。

對於大多數其他情況,答案是否定的。

6

我不知道版本之間兼容性的任何保證,即使在同一個編譯器上的版本和調試之間也沒有。

一個解決方案是爲矢量創建包裝。創建一個包含容器中所需的所有功能的類,並根據對該類的唯一成員私有向量的操作來實現它們。將所有類代碼保存在DLL中。

+0

+1 - 但這並不意味着它將是便攜式的。諸如異常處理方案之類的東西可能會在編譯器版本或編譯器開關之間發生變化,並且您無法控制這些內容。通常,如果你想要二進制兼容性,那麼你需要使用一個C接口。 (例如,在MSVC++中,'/ SAFESEH'和'/ Eh'開關會改變二進制級別的異常模型,我相信至少也是'/ GS') – 2011-04-20 20:47:33

4

絕對不是!如果使用相同編譯器的不同版本進行編譯,您甚至不能依賴相同版本的STL兼容。