我正在學習PIMPL習語。它的一個優點是二進制兼容性。我想知道二進制兼容性的優點是什麼。謝謝!爲什麼二進制兼容?
3
A
回答
3
它避免了Fragile Binary Interface Problem。它是這樣的:
程序使用庫。
用戶升級庫。升級改變了庫的二進制界面中的某些東西。
程序現在不能工作,直到重新編譯爲止,因爲它是爲舊的二進制接口構建的。
之一PIMPL方法的優點是,它可以讓你的東西,通常是一個類的公共接口的一部分轉移到其專用接口(其實爲一體的民營類的接口)。您可以更改專用接口而不破壞二進制兼容性。
0
PIMPL習慣用法的優點不在於二進制兼容性,而在於如果更改實現或者甚至是類的佈局,減少對重新編譯的需求。例如,如果將新的數據成員添加到類中,則會更改類的佈局,並且通常需要重新編譯該類的所有客戶端,但是如果使用PIMPL慣用語,則不會。
二進制兼容性更多的是與多個編譯器(以及編譯器版本)兼容,並且在C++中唯一能做到這一點的方法是使用由不向客戶端公開的類實現的接口(抽象類)。這是因爲抽象類的vtable佈局是由所有編譯器實現的。許多API(例如DirectX API)都以這種方式公開,以便它們可以與任何編譯器一起使用。
+0
您不必重新編譯的原因正是您保留了二進制兼容性。 – 2015-11-01 10:18:57
相關問題
- 1. 爲什麼必須將版本兼容性設置爲不兼容二進制兼容性,然後回到二進制兼容性才能使其工作?
- 2. Haskell二進制兼容性
- 3. 二進制兼容性
- 4. Linux二進制兼容性
- 5. STL容器的二進制兼容性
- 6. 什麼是Java中的二進制兼容性?
- 7. 什麼類型的Postgres中的二進制不兼容?
- 8. Sbt插件二進制不兼容
- 9. 規避vb6二進制兼容性
- 10. j2me波蘭語二進制兼容性
- 11. 文件的二進制兼容性*
- 12. 與C的二進制兼容性
- 13. COM接口和二進制兼容性
- 14. Solaris:libSTLPort.so與libCstd.so的二進制兼容性?
- 15. Linux發行版二進制兼容性
- 16. 確定二進制兼容性linux下
- 17. 二進制兼容性vs向後兼容性
- 18. 概念上二進制和源代碼兼容性有什麼區別?
- 19. 爲什麼貓改變二進制文件的內容?
- 20. 爲什麼我會看到二進制文件的內容?
- 21. 爲什麼二進制搜索樹?
- 22. 爲什麼要將二進制轉換爲十進制?
- 23. 十六進制爲二進制形式,需要說明什麼?
- 24. 二進制內容
- 25. 爲什麼瀏覽器兼容性測試進入NFR?
- 26. 爲什麼迭代器不兼容?
- 27. 爲什麼這個CLS不兼容?
- 28. E2010不兼容的類型,爲什麼?
- 29. 爲什麼不兼容的類型?
- 30. 爲什麼CURLOPT_FOLLOWLOCATION與open_basedir不兼容?
給出索賠的參考 – 2013-03-16 03:45:26