【问题标题】:Binary compatibility of STL containersSTL 容器的二进制兼容性
【发布时间】:2011-08-09 19:51:22
【问题描述】:

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

【问题讨论】:

  • 你甚至不能希望在具有不同编译器标志的相同 STL 版本中实现二进制兼容性。

标签: c++ stl binary-compatibility


【解决方案1】:

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

一种解决方案是为向量创建一个包装器。创建一个具有容器所需的所有功能的类,并根据对作为该类唯一成员的私有向量的操作来实现它们。将所有类代码保留在 DLL 中。

【讨论】:

  • +1 -- 但这并不意味着它是可移植的。诸如异常处理方案之类的东西也可以在编译器版本或编译器切换之间发生变化,您无法控制这些事情。通常,如果您想要二进制兼容性,则需要使用 C 接口。 (例如,在 MSVC++ 上,/SAFESEH 和 /Eh 开关改变了二进制级别的异常模型,我相信至少 /GS 也是如此)
【解决方案2】:

绝对不是!如果使用相同编译器的不同版本编译,您甚至不能依赖相同版本的 STL 兼容。

【讨论】:

    【解决方案3】:

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

    对于大多数其他情况,答案是否定的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-11
      • 2011-08-03
      • 2011-07-24
      • 2020-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多