假设我在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. 二进制兼容性
- 2. Haskell二进制兼容性
- 3. stl兼容的容器
- 4. 二进制兼容性vs向后兼容性
- 5. Solaris:libSTLPort.so与libCstd.so的二进制兼容性?
- 6. 与C的二进制兼容性
- 7. 文件的二进制兼容性*
- 8. COM接口和二进制兼容性
- 9. Linux发行版二进制兼容性
- 10. 规避vb6二进制兼容性
- 11. 为什么必须将版本兼容性设置为不兼容二进制兼容性,然后回到二进制兼容性才能使其工作?
- 12. Sbt插件二进制不兼容
- 13. 为什么二进制兼容?
- 14. GCC目标特异性和二进制兼容性
- 15. 如何打开STL向后兼容性?
- 16. 什么是Java中的二进制兼容性?
- 17. Java - 抽象类和子类的二进制兼容性
- 18. 是否更改vb.net break二进制兼容性的目标cpu?
- 19. Java中的重构方法和二进制兼容性
- 20. VS2017和VS2015之间的二进制兼容性
- 21. 纯虚函数和二进制兼容性
- 22. 清理代码中断二进制兼容性
- 23. 虚拟覆盖和二进制兼容性
- 24. C#插件系统二进制兼容性问题
- 25. 可以在.NET库中实现二进制兼容性吗?
- 26. 二进制文件和兼容性标准信息 - C++/JAVA
- 27. 如何自动测试二进制兼容性?
- 28. 二进制文件和跨平台兼容性
- 29. 如何在JDK中启用32位二进制兼容性?
- 30. STL - 复制混合容器
您甚至不希望在具有不同编译器标志的STL版本中使用二进制兼容性。 – 2011-04-20 21:02:06