C ++中的标准库实现之间有什么区别?

What is the difference between standard library implementations in C++?

我大概是我们德国人说的'on the wood way'。 (走错路的谚语)

C++ 定义了一个标准库,这个标准在 C++98、C++11、C+17 中经常更新(如果我错了请纠正我)。我假设每个编译器或 OS 都定义了自己的标准库实现。

那么除了明显的 OS 特定部分之外,标准库的这些实现之间有什么区别(如果有的话)?

是否有 'variants' 相同 OS 的实现?如果是这样,我什么时候会费心使用哪个实现?

嗯,标准这个词确实有一定的含义,不是吗。

重点是:如果事情是标准,那么每个实施都需要反映该标准。

换句话说:不要担心标准,而是担心那些没有明确规定的事情,例如 here

此外,这是一个非常广泛的话题。我认为您应该 缩小 到更具体的范围 questions/areas。

编辑 - 各组创建自己的实现的原因:

  1. 例如,与 Java 相比,没有 "the golden standards" 实现
  2. 编译器构建者可能希望根据他们的产品微调库(可能只是关于 legal/licencing 个主题)

基本上每个容器的任何定义都是特定于实现的。该标准仅规定声明和预期行为、副作用和条件。

§21.4.2 中的示例:

basic_string(const basic_string& str,
               size_type pos, size_type n = npos,
               const Allocator& a = Allocator()); 

Requires: pos <= str.size()

Throws: out_of_range if pos > str.size().

Effects: Constructs an object of class basic_string and determines the effective length rlen of the initial string value as the smaller of n and str.size() - pos, as indicated in Table 65.

如您所见,标准还说 std::basic_string 的构造函数做什么,但没有说 how[=35= 】 应该实施。它还定义了应该使用的签名。实际的 实现 因编译器供应商而异 - gccclang 有不同的实现,虽然它们是针对相同的平台,但构造函数做同样的事情。

您无需担心实现(好吧,从技术上讲,您需要担心 - 有些实现不会实现 一切,但这种情况很少见),因为它们都( 应该) 执行标准中记录的所有内容。