Pie*_*ter 432 c++ stl std c++-faq c++-standard-library
有人把这篇文章给我的注意,声称(我意译)的STL长期被误指整个C++标准库,而不是从SGI STL中采取的部分.
(...)它指的是"STL",尽管很少有人仍然使用STL(在SGI设计).
C++标准库的一部分基于STL的一部分,正是这些部分,许多人(包括几位作者和臭名昭着的错误记录的cplusplus.com)仍然称为"STL".但是,这是不准确的; 事实上,C++标准从未提及"STL",两者之间存在内容差异.
(...)"STL"很少用于指代恰好基于SGI STL的stdlib的位.人们认为这是整个标准库.它被放在简历上.这是误导.
我几乎不了解C++的历史,所以我不能判断文章的正确性.我应该避免使用术语STL吗?或者这是一个孤立的意见?
Lig*_*ica 558
"STL" 是由Alexander Stepanov在C++标准化之前很久就写的.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++标准库"(或stdlib)
然而,还有另一种思想流派 - 我订阅了 - 这说明这令人困惑.第一次学习C++的人不知道这种区别,也可能没有注意到语言的差异.
该文章的作者曾多次遇到过那些认为整个C++标准库是 STL的人,包括从未成为STL本身的一部分的功能.相比之下,"STL"的大多数声音支持者确切地知道它们的含义,并拒绝相信并非每个人都"得到它".显然,该术语的用法并不统一.
此外,还有一些类似STL的库实际上是原始STL的实现,而不是C++标准库.直到最近,STLPort才是其中之一(甚至在那里,混乱也很丰富!).
此外,C++标准在任何地方都不包含文本"STL",并且有些人习惯性地使用诸如"STL 包含在C++标准库中"之类的短语,这是明显不正确的.
我相信继续以这种方式传播这个术语的使用只会导致误解永远持续下去.唉,尝试改变事物可能完全适得其反,即使它应该变得更好.我们可能永远陷入双重意义.
结论
我很欣赏这篇文章有点偏颇:我写了你链接的文章.:)无论如何,我希望这有助于更好地解释战斗.
更新13/04/2011
以下是使用"STL"来引用整个C++标准库的人的三个 完美 示例.它让我感到困惑的是,很多人发誓盲目,没有人会这样做,而且几乎每天都能看到这一点.
Jer*_*fin 81
没有一个答案是真的正确.Alexander Stepanov开发了一个名为STL的图书馆(当时为HP工作).然后建议将该库包含在C++标准中.
这基本上是"分叉"的发展.该委员会包括一些部分,完全拒绝其他部分,并重新设计了一些(亚历山大参与).原始库的开发后来转移到Silicon Graphics,但是继续与C++标准库分开.
之后这些作品被添加到标准库,标准库的其他一些地方进行了修改,以适应加入什么更好的(例如begin,end,rbegin和rend加入std::string,以便它可以像一个容器中使用).大约在同一时间,大多数库(甚至是完全不相关的片段被制作成模板以适应不同类型(例如,标准流)).
有些人还使用STL作为"STandard Library"的简称.
这意味着当有人使用术语"STL"时,他们可能指的是大约六种不同的东西中的任何一种.无论好坏,大多数使用它的人似乎忽略了多种意义,并假设其他人都会认识到他们所指的是什么.这导致了许多误解,并且至少有一些严重的火焰战争使得大多数参与者看起来很愚蠢,因为他们只是在谈论完全不同的事情.
不幸的是,混乱可能会继续有增无减.引用"STL"比"C++标准库中的容器,迭代器和算法"更方便,但不包括std::string,即使它可以像容器一样.尽管"C++标准库"不是那么长而且笨拙,但"STL"仍然更短更简单.除非有人发明更精确的术语(必要时),并且同样方便,否则将继续使用"STL"并继续产生混淆.
In *_*ico 49
术语"STL"或"标准模板库"不会出现在ISO 14882 C++标准的任何地方.所以将C++标准库称为STL是错误的.术语"C++标准库"或"标准库"是ISO 14882正式使用的:
ISO 14882 C++标准:
17 - 图书馆介绍[lib.library]:
- 这个子句描述了C++标准库的内容,一个结构良好的C++程序如何使用该库,以及一致的实现如何提供库中的实体.
...
STL是一个最初由Alexander Stepanov设计的库,独立于C++标准.然而,C++标准库的一些组分包括STL部件等vector,list以及类似的算法copy和swap.
但是当然C++标准包含了更多STL以外的东西,因此术语"C++标准库"更为正确(并且是标准文档实际使用的内容).
Mar*_*som 22
我最近提出了同样的论点,但我相信可以允许一点宽容.如果斯科特迈耶斯犯了同样的错误,你就会很好.
来自GNU 标准 C++ 库 (libstdc++) 常见问题解答:
STL(标准模板库)是大量 C++ 标准库的灵感来源,但这些术语不能互换,它们的意思也不同。C++ 标准库包含许多不是来自 STL 的东西,其中一些甚至不是模板,例如std::locale和std::thread。
Libstdc++-v3 合并了许多来自SGI STL的代码(最终合并来自3.3 版)。与原始 SGI 代码相比,libstdc++ 中的代码包含许多修复和更改。
特别是,string不是来自 SGI 并且不使用他们的“绳索”类(尽管它作为可选扩展包含在内),也不是,也不是valarray其他一些。类似的类vector<>来自 SGI,但已被广泛修改。
有关 libstdc++ 演进的更多信息,请参阅API 演进和向后兼容性文档。
SGI 的 STL的FAQ仍然推荐阅读。
仅供参考,截至 2018 年 3 月,即使是官方 STL 网站www.sgi.com/tech/stl/ 也不见了。
| 归档时间: |
|
| 查看次数: |
87779 次 |
| 最近记录: |