C++标准库的版本

11

这些内容是关于GNU C++库(libstdc++)、C++标准库标准模板库和SGI STL之间的区别。在使用GCC编译器在Linux上编程以及在MSVC(微软Visual C ++)上在Windows上编程时,默认使用哪个标准的C++库呢?

2个回答

6

C++标准库 - 它定义了库必须提供的功能/行为的通用定义 (如字符串、键值对、输入输出流、容器、算法等,具体细节取决于C++标准的版本)。

标准模板库(STL)- C++标准库中与容器和算法有关的部分(以及将这两个元素结合在一起的迭代器)。STL不是最初的C++库的一部分。

libstdc++ - C++标准库的一个特定实现。

SGI STL - C++标准库中STL部分的一个特定实现。我相信这也是最早的STL版本之一。在STL成为C++库的一部分之前,开发人员必须单独下载STL(就像我们目前使用Boost一样)。


2
嗯,STL曾经是1998年原始的C++标准的一部分。(事实上,STL的整合在标准化过程中开始得很晚,这显著延迟了第一个C++标准的发布。)SGI STL是STL的一个特定实现(我认为甚至是最初的实现)。并非所有STL都被纳入C++标准(例如slist),而后者中的一些内容并不来自STL(例如std::string作为STL容器)。 - sbi
STL并不是最初的C++标准的一部分 - 这可以被视为正确的 - C++标准从未提到过“STL”,或者错误的是,组成STL的容器和算法一直是C++标准的一部分。 - anon
1
STL不在ARM中,这可能被认为是一种标准文档。它在第一个官方标准中。 - David Thornley
1
许多东西都不在ARM中。它从来没有被视为标准文档,因为它不是标准文档。 - anon
@Neil:一些人认为ARM是“事实上”的标准。如果你说“与ARM 4.2段不一致”,在1998年之前向C++供应商投诉会更受重视。 - MSalters
“libstdc++ - C++标准库的一个特定实现”,您是指gnu gcc的实现吗? - Tim

4

仅就默认使用的标准C++库中STL组件的起源而言:

  • MSVC使用Dinkumware库(或者显然是其子集,因为Dinkumware还会为MSVC销售附加库)
  • GCC使用SGI STL的扩展版本作为libstdc++的一部分

如果您想替换STL,则有其他STL实现可供选择,例如STLport。选择您喜欢的即可。


你混淆了“STL”和“C++标准库”。这是一个常见的错误,但仍然是一个错误。 - sbi
@sbi:不,我自己并不困惑这两个概念,但我在尝试思考如何回答提问者的问题。但还是感谢你的想法(和你的点踩)。:-P - C. K. Young

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接