我正在学习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. 二进制兼容性
- 3. Haskell二进制兼容性
- 4. STL容器的二进制兼容性
- 5. 什么是Java中的二进制兼容性?
- 6. 什么类型的Postgres中的二进制不兼容?
- 7. Sbt插件二进制不兼容
- 8. COM接口和二进制兼容性
- 9. Linux发行版二进制兼容性
- 10. Solaris:libSTLPort.so与libCstd.so的二进制兼容性?
- 11. 与C的二进制兼容性
- 12. 规避vb6二进制兼容性
- 13. 文件的二进制兼容性*
- 14. 二进制兼容性vs向后兼容性
- 15. 概念上二进制和源代码兼容性有什么区别?
- 16. 为什么我会看到二进制文件的内容?
- 17. 为什么二进制搜索树?
- 18. 为什么要将二进制转换为十进制?
- 19. 十六进制为二进制形式,需要说明什么?
- 20. 二进制内容
- 21. 为什么java.util.Base64和org.apache.commons.ssl.Base64不兼容?
- 22. 为什么这个CLS不兼容?
- 23. E2010不兼容的类型,为什么?
- 24. 为什么xlwings UDF与OSX不兼容?
- 25. 为什么CURLOPT_FOLLOWLOCATION与open_basedir不兼容?
- 26. 为什么Spring @Value与@Controller不兼容?
- 27. 纯虚函数和二进制兼容性
- 28. LLVM和Visual Studio .obj二进制不兼容
- 29. 清理代码中断二进制兼容性
- 30. 虚拟覆盖和二进制兼容性
给出索赔的参考 – 2013-03-16 03:45:26