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

时间:2016-09-03 18:57:43

标签: c++ c++-standard-library

正如我们德国人所说,我可能正在“走上木头”。 (谚语走错路)

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

除了明显的操作系统特定部分之外,标准库的这些实现之间有什么不同(如果有的话)?

同一操作系统的实现是否有“变体”?如果是这样,我什么时候才想打扰使用哪种实现?

2 个答案:

答案 0 :(得分:6)

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

§21.4.2中的示例:

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

需要pos <= str.size()

     如果out_of_range

引发pos > str.size()

     

E ff ects :构造类basic_string的对象,并将初始字符串值的有效长度rlen确定为n和{{1}中的较小者如表65所示。

正如您所看到的,标准还说 {/ 1}}的构造函数,它没有说 应该如何实现。它还定义了应该使用的签名。实际的实现因编译器供应商而异 - str.size() - posstd::basic_string具有不同的实现,尽管它们用于同一平台,但构造函数执行相同的操作。

你不需要担心实现(从技术上来说,你做了 - 一些实现没有实现所有,但这很少见),因为它们都是(应该< / em>)做标准中记录的所有内容。

答案 1 :(得分:4)

嗯,标准这个词确实意味着某种意义,并不是它。

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

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

此外,这是一个非常广泛的话题。我认为你应该缩小到更具体的问题/领域。

编辑 - 各种团体创建自己的实现的原因:

  1. 与Java相比,例如,没有黄金标准&#34;实施
  2. 编译器构建器可能希望将库微调到他们的产品(可能只是关于合法/许可主题)