正如我们德国人所说,我可能正在“走上木头”。 (谚语走错路)
C ++定义了一个标准库,这个标准经常在C ++ 98,C ++ 11,C + 17中更新(如果我错了,请纠正我)。我假设每个编译器或操作系统都定义了自己的标准库实现。
除了明显的操作系统特定部分之外,标准库的这些实现之间有什么不同(如果有的话)?
同一操作系统的实现是否有“变体”?如果是这样,我什么时候才想打扰使用哪种实现?
答案 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() - pos
和std::basic_string
具有不同的实现,尽管它们用于同一平台,但构造函数执行相同的操作。
你不需要担心实现(从技术上来说,你做了 - 一些实现没有实现所有,但这很少见),因为它们都是(应该< / em>)做标准中记录的所有内容。
答案 1 :(得分:4)
嗯,标准这个词确实意味着某种意义,并不是它。
重点是:如果事情是标准,那么每个实现都需要反映该标准。
换句话说:不要担心标准,而是担心那些没有明确规定的事情,比如here。
此外,这是一个非常广泛的话题。我认为你应该缩小到更具体的问题/领域。
编辑 - 各种团体创建自己的实现的原因: