“STL”和“C ++标准库”之间有什么区别?

What's the difference between “STL” and “C++ Standard Library”?

有人把这篇文章引起了我的注意,声称(我在解释)STL术语被误用来引用整个C++标准库,而不是从SGI STL中提取的部分。

(...) it refers to the"STL", despite the fact that very few people still use the STL (which was designed at SGI).

Parts of the C++ Standard Library were based on parts of the STL, and it is these parts that many people (including several authors and the notoriously error-ridden cplusplus.com) still refer to as"the STL". However, this is inaccurate; indeed, the C++ standard never mentions"STL", and there are content differences between the two.

(...)"STL" is rarely used to refer to the bits of the stdlib that happen to be based on the SGI STL. People think it's the entire standard library. It gets put on CVs. And it is misleading.

我对C++的历史几乎一无所知,所以我无法判断文章的正确性。我应该避免使用stl这个词吗?或者这是一个孤立的观点?


"STL"是在C++标准化之前的几天里由Alexander Stepanov编写的。C++通过80年代存在,但是我们现在称之为"C++"的是ISO/IEC 1488—2014年标准化的语言(以及早期版本,例如ISO/IEC 1488∶2011)。

STL已经被广泛地用作C++的库,使程序员可以访问容器、迭代器和算法。当标准化发生时,语言委员会设计了C++标准库的部分(这是语言标准的一部分)与STL非常匹配。

多年来,许多人(包括著名的图书作者和各种网站& MMASH)继续将C++标准库称为"STL",尽管这两个实体是分开的,并且存在一些差异。这些差异在即将到来的新C++标准中更为明显,它包括各种特征并显著地改变某些类。

原来的STL现在通常被称为"C++标准模板库的实现"(而不是真正的历史记录!)与微软VisualStudio或GCC相同的方式提供C++标准库的实现。但是"标准模板库"和"标准库"是不同的。

这场战斗是关于当前的标准库是应该被称为"STL"的全部还是部分,以及/或者它是否与它所称的内容有关。

对于"STL"

有一种学派认为,现在每个人都知道"STL"是标准库,正如大家现在都知道的,"C++"是ISO标准化语言。

它还包括那些相信只要各方都了解正在谈论的内容,这并不真正重要的人。

这是一个更为普遍的术语,因为野兽的本性,其中大部分都使用了被称为"模板"的C++特性。

对于"C++标准库"(或STDLIB)

但是,我订阅了另一个思想流派,它说这令人困惑。人们第一次学习C++不知道这一区别,并且可能不注意小语言的差异。

该文章的作者曾多次遇到过这样的人,他们认为整个C++标准库是STL,包括从不属于STL本身的特征。相比之下,"STL"的大多数声乐支持者确切地知道他们所说的"STL"是什么意思,并拒绝相信并非每个人都"明白"。显然,这个词的用法并不统一。

此外,还存在一些STL类库,它们实际上是原始STL的实现,而不是C++标准库。直到最近,STLPort还是其中之一(即使在那里,混乱也比比皆是!).

此外,C++标准在任何地方都不包含文本"STL",有些人习惯性地使用诸如"STL被包含在C++标准库中"这样的短语,这是很不正确的。

我相信继续以这种方式传播这个词的用法只会导致永远的误解。唉,尝试改变事物可能会完全适得其反,即使它应该是为了更好。我们可能永远被双重意义所束缚。

结论

我很感激这篇文章有点偏颇:我写了你链接的文章。:)不管怎样,我希望这有助于更好地解释这场战斗。

2011年4月13日更新

这里有三个使用"STL"来引用整个C++标准库的完美例子。我一直很困惑,有那么多人发誓,如果每天几乎都能看到,就没有人会这样做。


没有一个答案是正确的。Alexander Stepanov开发了一个称为STL的库(当时为惠普工作)。然后建议该库包含在C++标准中。

这基本上是"分叉"发展。委员会包括了一些部分,完全拒绝了其他部分,并重新设计了一些部分(在亚历山大的参与下)。原来的图书馆的开发后来移到了硅图形,但继续与C++标准库分开。

将这些部分添加到标准库后,对标准库的一些其他部分进行了修改,以便更好地适应添加的内容(例如,将beginendrbeginrend添加到std::string中,以便将其用作容器)。大约在同一时间,大多数库(甚至完全无关的部分)都被制成模板以适应不同的类型(例如,标准流)。

有些人还将STL作为"标准库"的一种简短形式。

这意味着,当有人使用"stl"这个词时,他们可能指的是大约6种不同事物中的任何一种。不管是好是坏,大多数使用它的人似乎忽视了意义的多样性,并假定其他人都会认识到他们所指的东西。这导致了许多误解,至少有几场严重的火焰大战让大多数参与者看起来很愚蠢,因为他们只是在谈论完全不同的事情。

不幸的是,这种混乱可能会持续下去。引用"STL"比"C++标准库中的容器、迭代器和算法"更方便,但不包括EDCOX1×4,即使它可以像容器一样。"即使"C++标准库"不是那么长和笨拙,"STL"仍然是更短和更简单。直到或除非有人发明了更精确的术语(必要时),并且同样方便,"stl"将继续使用,并将继续导致混淆。


the term"的"标准模板库STL"或"does not show上茶14882 * ISO C++标准。我知道referring to the C++ STL标准库as is wrong。the term"C++标准库"或"标准库"是什么14882:ISO officially used byP></

ISO 14882 C++ Standard:

17 - Library introduction [lib.library]:

  • This clauses describes the contents of the C++ Standard Library, how
    a well-formed C++ program makes use of
    the library, and how a conforming
    implementation may provide the
    entities in the library.
  • ...

    设计模式库STL是originally Alexander Stepanov,独立of the C++标准。不管一个人多零件,some of the C++ STL标准库组件包括vector类,类和swapcopylist和算法。P></

    but of the C++课程标准包括多更多的东西真的知道the term"the STL的C++标准库"是正确的(和黑莓什么used by the其实是标准的文件)。P></


    我最近也提出了同样的论点,但我相信可以允许一点宽容。如果斯科特·迈耶斯犯了同样的错误,你就有很好的同伴。


    从GNU标准C++库(LIbSTDC + +)常见问题解答:

    STL(标准模板库)是对C++标准库大块的启发,但是术语不是可互换的,它们并不意味着相同的东西。C++标准库包含很多来自STL的东西,有些甚至不是模板,如EDCOX1,6,EDCX1,7。

    libstdc++-v3包含了很多来自sgi stl的代码(最终的合并来自于版本3.3)。与原始SGI代码相比,libstdc++中的代码包含许多修复和更改。

    特别是,string不是来自SGI,也没有使用它们的"绳索"类别(尽管这是作为可选扩展包括在内),valarray或其他一些类别也没有。像vector<>这样的类来自SGI,但已经被广泛修改。

    有关libstdc++演进的更多信息,请参阅API演进和向后兼容性文档。

    SGI STL的常见问题解答仍然是推荐阅读。

    仅供参考,截至2018年3月,甚至官方STL网站www.sgi.com/tech/stl/也消失了。