“STL”是在 C++ 标准化之前很久由 Alexander Stepanov 编写的。C++ 存在于 80 年代,但我们现在所说的“ C++ ”是 ISO/IEC 14882:2014(以及更早的版本,如 ISO/IEC 14882:2011)中标准化的语言。
STL 已经被广泛用作 C++ 的库,让程序员可以访问容器、迭代器和算法。当标准化发生时,语言委员会设计了部分C++ 标准库(它是语言标准的一部分)以非常接近 STL。
多年来,许多人——包括著名的书籍作者和各种网站——继续将 C++ 标准库称为“STL”,尽管这两个实体是独立的并且存在一些差异。这些差异在即将推出的新 C++ 标准中更加明显,该标准包括各种特性并显着改变了一些类。
最初的 STL 现在通常被称为“C++ 标准模板库的实现”(而不是倒退到实际历史!),就像您的 Microsoft Visual Studio 或 GCC 发布 C++ 标准库的实现一样。但是“标准模板库”和“标准库”不是一回事。
争论的焦点是当前的标准库是否应该全部或部分称为“STL”,和/或它的名称是否重要。
对于“STL”
有一种观点认为,现在每个人都知道“STL”是指标准库,就像现在每个人都知道“C++”是 ISO 标准化语言一样。
它还包括那些认为只要各方都了解所谈论的内容并不重要的人。
由于野兽的本性,这个术语变得更加流行,其中大部分都大量使用了称为“模板”的 C++ 特性。
对于“C++ 标准库”(或标准库)
然而,还有另一种思想流派——我赞同——说这很令人困惑。第一次学习 C++ 的人不知道这种区别,并且可能不会注意到小的语言差异。
那篇文章的作者曾多次遇到有人认为整个 C++ 标准库就是STL,包括从未属于 STL 本身的特性。相比之下,大多数“STL”的直言不讳的支持者确切地知道他们所说的意思,并且拒绝相信不是每个人都“明白”。显然,该术语的用法并不统一。
此外,还有一些类似 STL 的库实际上是原始 STL 的实现,而不是 C++ 标准库。直到最近,STLPort还是其中之一(即使在那里,混乱也比比皆是!)。
此外,C++ 标准在任何地方都没有包含“STL”文本,有些人习惯性地使用“STL包含在 C++ 标准库中”之类的短语,这是完全不正确的。
我相信,继续以这种方式传播该术语的使用只会导致误解永远持续下去。唉,试图改变事情可能完全适得其反,即使它应该是更好的。我们可能永远被双重含义所困。
结论
我很欣赏这篇文章有点偏颇:我写了你链接到的文章。:) 无论如何,我希望这有助于更好地解释这场战斗。
2011 年 13 月 4 日更新
以下是使用“STL”来引用整个 C++ 标准库的人的三个 完美 示例。让我感到困惑的是,有这么多人发誓从来没有人这样做过,而几乎每天都能看到。