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。
编辑 - 各组创建自己的实现的原因:
- 例如,与 Java 相比,没有 "the golden standards" 实现
- 编译器构建者可能希望根据他们的产品微调库(可能只是关于 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= 】 应该实施。它还定义了应该使用的签名。实际的 实现 因编译器供应商而异 - gcc
和 clang
有不同的实现,虽然它们是针对相同的平台,但构造函数做同样的事情。
您无需担心实现(好吧,从技术上讲,您需要担心 - 有些实现不会实现 一切,但这种情况很少见),因为它们都( 应该) 执行标准中记录的所有内容。
我大概是我们德国人说的'on the wood way'。 (走错路的谚语)
C++ 定义了一个标准库,这个标准在 C++98、C++11、C+17 中经常更新(如果我错了请纠正我)。我假设每个编译器或 OS 都定义了自己的标准库实现。
那么除了明显的 OS 特定部分之外,标准库的这些实现之间有什么区别(如果有的话)?
是否有 'variants' 相同 OS 的实现?如果是这样,我什么时候会费心使用哪个实现?
嗯,标准这个词确实有一定的含义,不是吗。
重点是:如果事情是标准,那么每个实施都需要反映该标准。
换句话说:不要担心标准,而是担心那些没有明确规定的事情,例如 here。
此外,这是一个非常广泛的话题。我认为您应该 缩小 到更具体的范围 questions/areas。
编辑 - 各组创建自己的实现的原因:
- 例如,与 Java 相比,没有 "the golden standards" 实现
- 编译器构建者可能希望根据他们的产品微调库(可能只是关于 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
ifpos > str.size()
.Effects: Constructs an object of class
basic_string
and determines the effective lengthrlen
of the initial string value as the smaller ofn
andstr.size() - pos
, as indicated in Table 65.
如您所见,标准还说 std::basic_string
的构造函数做什么,但没有说 how[=35= 】 应该实施。它还定义了应该使用的签名。实际的 实现 因编译器供应商而异 - gcc
和 clang
有不同的实现,虽然它们是针对相同的平台,但构造函数做同样的事情。
您无需担心实现(好吧,从技术上讲,您需要担心 - 有些实现不会实现 一切,但这种情况很少见),因为它们都( 应该) 执行标准中记录的所有内容。