问题 C ++标准库的版本


GNU C ++库(libstdc ++)有什么区别, “C ++标准库”“标准模板库” 和“SGI STL”。使用编译器GCC在Linux中编程并在MSVC(MicroSoft Visual C ++)中使用Windos编程时,标准C ++库默认使用哪些? 谢谢!


6329
2018-02-10 20:24


起源



答案:


C ++标准库 - 库必须提供哪些功能/行为的通用定义(字符串,对,iostream,容器,算法等,尽管具体情况因C ++标准的版本而异)。

标准模板库(STL) - C ++标准库的一部分,它与容器和算法(以及将这两者结合在一起的迭代器)有关。 STL不是原始C ++库的一部分。

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

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


6
2018-02-10 20:26



嗯,STL 是 1998年最初的C ++标准的一部分。(实际上,STL的合并,在标准化过程中起步较晚,显着推迟了第一个C ++标准。)SGI STL是一个特定的(我认为它甚至是原始的)实现STL。并非所有STL都将其纳入C ++标准(例如, slist并且后者中的一些不是来自STL(例如, std::string 作为STL容器)。 - sbi
“STL不是原始C ++标准的一部分” - 这可以被认为是正确的 - C ++标准无处可称为“STL”或错误,因为构成STL的容器和算法一直是C ++标准。
STL不在ARM中,可能被视为一种标准文档。这是第一个官方标准。 - David Thornley
ARM中没有很多东西。它从未被视为标准文件,因为它不是一个。
@Neil:ARM被一些人视为“事实上的”标准。如果您说“与ARM第4.2段不一致”,那么1998年之前对您的C ++供应商的投诉会更加严肃。 - MSalters


答案:


C ++标准库 - 库必须提供哪些功能/行为的通用定义(字符串,对,iostream,容器,算法等,尽管具体情况因C ++标准的版本而异)。

标准模板库(STL) - C ++标准库的一部分,它与容器和算法(以及将这两者结合在一起的迭代器)有关。 STL不是原始C ++库的一部分。

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

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


6
2018-02-10 20:26



嗯,STL 是 1998年最初的C ++标准的一部分。(实际上,STL的合并,在标准化过程中起步较晚,显着推迟了第一个C ++标准。)SGI STL是一个特定的(我认为它甚至是原始的)实现STL。并非所有STL都将其纳入C ++标准(例如, slist并且后者中的一些不是来自STL(例如, std::string 作为STL容器)。 - sbi
“STL不是原始C ++标准的一部分” - 这可以被认为是正确的 - C ++标准无处可称为“STL”或错误,因为构成STL的容器和算法一直是C ++标准。
STL不在ARM中,可能被视为一种标准文档。这是第一个官方标准。 - David Thornley
ARM中没有很多东西。它从未被视为标准文件,因为它不是一个。
@Neil:ARM被一些人视为“事实上的”标准。如果您说“与ARM第4.2段不一致”,那么1998年之前对您的C ++供应商的投诉会更加严肃。 - MSalters


仅说明默认使用的标准C ++库的STL组件的来源:

  • MSVC使用Dinkumware库(或显然是其子集,因为Dinkumware也会出售MSVC的插件库:-P)
  • GCC使用SGI STL的扩展版本作为libstdc ++的一部分

如果要换出STL,还有其他STL实现,如STLport。选择你的毒药。 :-P


4
2018-02-10 20:26



你混淆了“STL”和“C ++标准库”。这是一个常见的错误,但仍然是一个错误。 - sbi
@sbi:不,我对这两者并不感到困惑,但我试图想办法回答OP的问题。但感谢你的想法(和你的downvote)。 :-P - Chris Jester-Young