STL模板实现机制.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
STL模板实现机制

C++之父Bjarne谈C++中的STL模板 在1994年,我主要关心的是如何使ISO C++标准尽可能地好--同时在它所包含的特性和规范的质量两个方面--并获得多数人的同意。即使人们不接受某种规范,也不会影响它(规范)的良好性。ISO标准没有强制力,因此有些人认为自己不值得浪费时间来适应它,除非(群体)社团的压力能够使他们确信该规范的价值。对于一个实现者来说,适应环境是很重要的额外工作,因此适应环境是一个有意识的决定,并且需要分配一些资源,而这些资源本来可以在其它地方使用。某些晦涩的语言特性很难在某些编译器中实现。我们可以实现或者购买类库,而且领先的、可靠的实现者(implementer)也有机会用自己的富于想像力的专利特性来锁定用户。因此,我认为要点是:让委员会成员和他们所代表的组织确信该标准的文档是他们所期望看到的最好的文档。   在做了很多工作之后,该委员会获得了成功。1997年10月,在Morristown(New Jersey,USA)会议上,技术成员的最终投票结果是43-0。在获知这个结果以后,我们进行了庆祝活动!在1998年,ISO成员国以空前的22-0的投票结果批准了这个标准。为了获取大家的一致同意,委员会做了大量的技术工作,也使用了一些外交策略:在那个时候,我喜欢说政治问题无法解决;我们必须找到引发该问题的技术问题并解决它。我无法想象仅仅通过投票,因为少数服从多数才简单解决的问题,同时,由于政治上的讨价还价的问题也危害了我们最好的技术判断--而这个问题(模板的分开编译)仍然在恶化,需要寻找一个更好的技术方案。   在最后投票之前的一年里,委员会的工作是:   1. 细节、细节和更多的细节。   2. STL   3. 模板的分开编译   第一个问题非常明显:国际标准必须用大量的篇幅来关注细节信息;实际上,实现(implement)与已有标准的兼容性是标准的关键目标,同时还是实现之间的工具和应用程序能够迁移的基础。标准是一个712页的文档(加上索引等内容),它是采用高度技术化的和正式的方式编写的,因此为了理解真正的含义需要很多的细节信息。像以前一样,我在新语言规范上附加了新版的C++编程语言,以提供更有帮助意义和面向用户的语言描述。   STL的出现   第二个问题,STL(标准模板类库,它是ISO C++标准类库的容器和算法框架)成为标准的一部分是一个主要的创新,并且它成为了新的用以思考已经出现的编程技术的出发点。STL基本上革命性地脱离了我们原来思考容器和容器使用问题的方式。在Simula早期,容器(例如列表)曾经是困扰人的:如果,并且只有当某个对象已经(显式或隐式地)衍生自那些包含编译器所需链接信息的特定的Link或Object类的时候,它才能被放到容器中。这种容器基本上是引用Link的容器。这暗示着基本的类型(例如int和double)不能直接地放入容器中,数组类型(它直接支持基本的类型)必定跟其它的容器不同。此外,如果我们希望把真正的简单类对象(例如complex和Point)放入容器中,那么它们在时间和空间上就无法达到理想效果。它同时还暗示着这种容器不是静态类型安全的。例如,Circle可以被加入列表中,但是当它被提取出来的时候,我们只知道它是一个Object,需要使用一个转换(显式类型转换)来恢复其静态类型。   Simula容器和数组关于内建和用户定义类型(只有后来的一些可以放入容器)、关于容器和数组(只有数组能够保存基本的类型;数组不能保存用户定义类型,只能保存用户定义类型的指针)都有一些奇怪的条款。Smalltalk使用了相同的方法,也有相同的问题,后来的一些语言(例如Java和C#)也是这样的。由于它有明显的效用,而且很多设计者现在都熟悉它,所以很多C++类库也遵循这种模型。但是,我却发现它是无规律的和低效率的(在时间和空间上),使用它开发真正通用的类库是不可以接受的。这就是我在1985年没有为C++提供适当的标准类库(这个失误)的根本原因。   当我编写DE的时候,我知道了一种容器和容器使用的新方法,它是由Alex Stepanov开发的。Alex当时在HP实验室工作,之前在Bell实验室工作了多年,在那儿他接近了Andrew Koenig,我也在那儿与他讨论过类库设计和模板机制。他鼓励我进一步研究某些模板机制的泛化和效率,但是很幸运的是,他却没有说服我让模板更类似Ada泛型。如果他成功了,他就无法设计和实现STL了!   在1993年末,Alex在泛型编程技术方面显示了他最近十年的长期研究的进展,这种技术是基于严格的数学基础的、目标是成为最通用和最高效的编程技术。他是一个容器和算法的框架。他首先联系了Andrew,Andrew花几天时间研究这种技术之后,就把

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档