假設我在C++中編寫了一個DLL,並想導出一個採用std :: vector參數的方法。我希望在不同的STL版本之間有任何二進制兼容性嗎?STL容器的二進制兼容性
5
A
回答
3
如果您的意思是包含在同一個編譯器的更新版本中的版本,是的,它可以(並且將會)在某些情況下工作,但是您必須小心。還有一些特殊情況,例如Windows上的英特爾和微軟編譯器 - 英特爾非常謹慎地維護二進制兼容性,至少在我嘗試過時,它總是很好地工作。
對於大多數其他情況,答案是否定的。
6
我不知道版本之間兼容性的任何保證,即使在同一個編譯器上的版本和調試之間也沒有。
一個解決方案是爲矢量創建包裝。創建一個包含容器中所需的所有功能的類,並根據對該類的唯一成員私有向量的操作來實現它們。將所有類代碼保存在DLL中。
+0
+1 - 但這並不意味着它將是便攜式的。諸如異常處理方案之類的東西可能會在編譯器版本或編譯器開關之間發生變化,並且您無法控制這些內容。通常,如果你想要二進制兼容性,那麼你需要使用一個C接口。 (例如,在MSVC++中,'/ SAFESEH'和'/ Eh'開關會改變二進制級別的異常模型,我相信至少也是'/ GS') – 2011-04-20 20:47:33
4
絕對不是!如果使用相同編譯器的不同版本進行編譯,您甚至不能依賴相同版本的STL兼容。
相關問題
- 1. Haskell二進制兼容性
- 2. 二進制兼容性
- 3. Linux二進制兼容性
- 4. stl兼容的容器
- 5. 二進制兼容性vs向後兼容性
- 6. 文件的二進制兼容性*
- 7. 與C的二進制兼容性
- 8. Solaris:libSTLPort.so與libCstd.so的二進制兼容性?
- 9. 規避vb6二進制兼容性
- 10. j2me波蘭語二進制兼容性
- 11. COM接口和二進制兼容性
- 12. Linux發行版二進制兼容性
- 13. 確定二進制兼容性linux下
- 14. 爲什麼必須將版本兼容性設置爲不兼容二進制兼容性,然後回到二進制兼容性才能使其工作?
- 15. 交叉編譯器在C中的二進制兼容性
- 16. Sbt插件二進制不兼容
- 17. 爲什麼二進制兼容?
- 18. GCC目標特異性和二進制兼容性
- 19. 如何打開STL向後兼容性?
- 20. STL兼容的內存分配器庫
- 21. VS2017和VS2015之間的二進制兼容性
- 22. 什麼是Java中的二進制兼容性?
- 23. VS2010和VS2012之間的二進制C++庫兼容性?
- 24. Java中的重構方法和二進制兼容性
- 25. 是否更改vb.net break二進制兼容性的目標cpu?
- 26. Java - 抽象類和子類的二進制兼容性
- 27. shell的二進制運算符兼容性
- 28. STL:容器的容器
- 29. 添加枚舉值會破壞二進制兼容性嗎?
- 30. 純虛函數和二進制兼容性
您甚至不希望在具有不同編譯器標誌的STL版本中使用二進制兼容性。 – 2011-04-20 21:02:06