STL容器的二进制兼容性

Binary compatibility of STL containers

本文关键字:二进制 兼容性 STL      更新时间:2023-10-16

假设我用c++编写了一个DLL,并想导出一个带有std::vector参数的方法。我能指望不同STL版本之间的二进制兼容性吗?

我不知道任何版本之间兼容性的保证,甚至在同一编译器上发布和调试之间也没有。

一个解决方案是为vector创建一个包装器。创建一个类,其中包含容器所需的所有函数,并根据对私有vector(该类的唯一成员)的操作来实现它们。将所有类代码保存在DLL中。

绝对不行!如果STL是用同一编译器的不同版本编译的,那么你甚至不能依赖于相同版本的STL是兼容的。

如果您的意思是同一编译器的更新版本所包含的版本之间,是的,它可以(并且将)在某些情况下工作,但您必须小心。也有一些特殊情况,比如Windows上的Intel和Microsoft编译器——Intel非常小心地维护二进制兼容性,至少当我尝试它时,它总是工作得很好。

在大多数情况下,答案是否定的