使用STL克隆有什么好处?

时间:2012-08-02 02:01:32

标签: c++ stl

  • 我什么时候需要替代C ++的STL?
  • 使用替代STL有什么好处吗?
  • 如果有的话,你会推荐哪些?

对不起这些noob要点,但是我看到很多产品附带了不同的STL链接,并且想知道什么时候这样有用。

3 个答案:

答案 0 :(得分:8)

我假设您正在讨论STL的替代实现,而不是STL的替代方案。

您可能使用第三方STL实现的原因有几个,而不是编译器提供的默认值。

  1. 一致性 - 您可能正在使用多个编译器,并希望确保在每个平台上获得相同的行为。

  2. 速度 - 实现可能比编译器提供的效率更高效。

  3. 完整性 - 您的编译器默认库可能无法提供完整的STL功能。 (这可能仅适用于旧编译器,嵌入式系统的编译器或C ++ 11功能)。

  4. 额外功能 - STL的某些实现提供了诸如改进无效迭代器调试等功能,这些功能可能不在您的编译器实现中。

  5. 显然并非所有这些都适用于所有编译器......但是肯定存在第三方STL可以提供帮助的情况。

    至于实施:您可以找到列表here

答案 1 :(得分:2)

迈克尔提供了一个很好的答案 - 只需要几点补充:

  • “速度”不仅仅是一个线性的东西,你可以果断地说STL实现X比STL Y快N%:有各种使用场景下的速度和内存使用的实现选择。例如,“短字符串优化”可以允许非常短的字符串直接存储在字符串对象中而不是存储在堆内存中;对于超出当前容量的容器的调整大小,实施方式可能略有不同。

  • 二进制互操作性是一个大问题:如果你需要调用一个预编译的库函数来接受STL X对象,你不能简单地链接库并为它提供STL Y等价物:可能有被破坏的名称之间的差异阻止了链接,对象的二进制布局可能会有所不同,即使没有,你强迫进行这样的调用 - 客户端代码对这些对象执行的操作可能不是库代码期望或需要的所有操作(即不会保持相同的不变量。)

  • 线程安全是“额外功能”的一个值得注意的例子......例如许多早期的STL在Copy-on-Write字符串实现方面存在错误。

答案 2 :(得分:0)

另一点:一些STL实现允许您禁用异常的使用,可能使用自定义全局错误处理程序而不是C ++异常。现在这一点不太重要,但很长一段时间以来,许多系统因各种原因而禁用异常,并且仍有一些异常系统不鼓励或完全不支持异常。