STL容器的二进制兼容性
Binary compatibility of STL containers
假设我用c++编写了一个DLL,并想导出一个带有std::vector参数的方法。我能指望不同STL版本之间的二进制兼容性吗?
我不知道任何版本之间兼容性的保证,甚至在同一编译器上发布和调试之间也没有。
一个解决方案是为vector创建一个包装器。创建一个类,其中包含容器所需的所有函数,并根据对私有vector(该类的唯一成员)的操作来实现它们。将所有类代码保存在DLL中。
绝对不行!如果STL是用同一编译器的不同版本编译的,那么你甚至不能依赖于相同版本的STL是兼容的。
如果您的意思是同一编译器的更新版本所包含的版本之间,是的,它可以(并且将)在某些情况下工作,但您必须小心。也有一些特殊情况,比如Windows上的Intel和Microsoft编译器——Intel非常小心地维护二进制兼容性,至少当我尝试它时,它总是工作得很好。
在大多数情况下,答案是否定的相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 添加noexcept是否会破坏二进制兼容性
- 在Qt中使用C++Lambda函数作为插槽是否有助于保持库的二进制兼容性?
- 为什么新的虚拟函数不会破坏二进制兼容性的现象?
- 在类中添加新的成员变量会影响二进制兼容性
- 2015年视觉工作室的二进制兼容性
- 保证C++库二进制兼容性的简单方法,C链接
- 添加move构造函数会破坏二进制兼容性吗
- 关于 Linux 的二进制兼容性
- 我们什么时候打破二进制兼容性
- Linux二进制兼容性
- 可以添加静态变量破坏 Linux 上的二进制兼容性
- 使用按引用传递而不是按指针传递时的二进制兼容性
- 旧发行版上的二进制兼容性(使用C++11)
- 在C++中更改参数名称时的二进制兼容性
- 不同类中相同结构定义的二进制兼容性
- 内联如何限制升级版本的二进制兼容性
- 由于虚拟函数,二进制兼容性中断
- 更改方法以添加隐藏的this指针是否会破坏二进制兼容性
- Solaris: libSTLPort的二进制兼容性.使用libstd.so