C++断想5x5系列文档格式.docx

上传人:b****5 文档编号:19385415 上传时间:2023-01-05 格式:DOCX 页数:23 大小:84.52KB
下载 相关 举报
C++断想5x5系列文档格式.docx_第1页
第1页 / 共23页
C++断想5x5系列文档格式.docx_第2页
第2页 / 共23页
C++断想5x5系列文档格式.docx_第3页
第3页 / 共23页
C++断想5x5系列文档格式.docx_第4页
第4页 / 共23页
C++断想5x5系列文档格式.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

C++断想5x5系列文档格式.docx

《C++断想5x5系列文档格式.docx》由会员分享,可在线阅读,更多相关《C++断想5x5系列文档格式.docx(23页珍藏版)》请在冰豆网上搜索。

C++断想5x5系列文档格式.docx

公布之前,我想先罗嗦几句。

这些C++领域最重要贡献是在我个人阅历和准则基础上评选的,是我的主观看法,这点自不待言。

而不得不说的恰恰是我个人的阅历和评选准则。

你们很多人不得不承认:

过去20年里,我从未开发过商业软件,更遑论用C++写这类程序。

不,不光过去,将来我也不会。

因此,我不但不是真正的C++开发人员,更说不上是C++崇拜者。

如果一定要扯点关系的话,那就是我在1985-1993年上大学时,用C++写过一个研究用软件,很小,就几千行代码,我一个人开发,它很快就成了历史的尘埃。

自从我十余年前专心作咨询师以来,我的C++编程仅限于玩乐,比如“让我们看看它如何工作”(有时候也“让我们看看它能让多少编译器崩溃”),通常,都是一个文件就可以容纳的程序。

make?

谁需要讨厌的make?

我以C++为生,但不是写C++程序。

和语言标准化亲密接触,于我的生活也没多大干系,因为我从未成为C++标准委员会成员,未被列入委员会的邮件名单,也从来没有参加过任何标准工作会议。

我对委员会内部工作的了解——包括对语言有重大影响的工作——都靠阅读他人的文章,或者从他们那听说。

因此我对像我们知道的那样推动了C++发展的那些重大努力知之甚少,可能只有委员会内部的同志对这些努力感受最深。

上面说了,我既不用C++写软件,也没为语言规范贡献力量,那我到底在干嘛呢?

你可能满怀疑窦。

基本上可以这么讲,我就研究C++本身以及它的应用。

尽我所能,通过图书、杂志、新闻组、邮件以及和开发者、标准化委员会成员面对面交流,加上我自己写程序做实验玩儿等,我收集了大量有关C++的资料,然后对它们做整理、分析,最后集中打包(如写书、在杂志上发表文章、作技术报告等)提供给真正使用这门语言的朋友们,比如你。

你们的工作是使用C++这个工具,开发有用的软件;

我的工作是搜集、整理能帮助你们更好使用这个工具的资料。

我希望将自己定位为局外观察员,既不像程序员那样日复一日辛苦劳作,也不愿为标准化工作的纷繁琐事殚精竭思,但我要对二者都保持熟悉。

这一系列的文章,就是我这个自封的局外观察员对C++历史上最重大贡献的总结。

所谓“最重大”,我指的是这些贡献对C++开发人员产生了最重大的影响。

我的名单上所列项,很多都发挥了直接性的影响,我们也直接感觉到了。

比如广泛使用的编译器、库和读者众多的图书与文章,它们的影响力非常直接。

另外一些的影响则是间接的——我是说它们首先对中间渠道产生直接或间接的影响,然后由中间渠道直接影响我们(哈,绕口令,惹你讨厌了吧?

)——比如你稍后会看到的、被我列为最重要图书之一的《ISOC++Standard》,对于开发人员,它的影响是间接的,但对编译和库编写者的影响却是直接的。

有些贡献的重要性非常明显,比如和标准有关的。

其他的,通常则需要时间老人来验证它们的影响力。

因此,在C++圈子里出现相对较晚的,与已经存在较长时间的相比,更不容易列入我的名单。

比如我的图书名单里,最晚的只到2001年。

这倒不是说在过去五年里出版的图书就没有价值,而是说,以我来看,这些图书还没有表现出我名单上所列图书更大的重要性。

如果过些年再来问我,或许就会有所变动了。

五本最重要的C++图书

为了让这个名单(也包括后续文章中提到的其他名单)更有价值,我给自己定了两条原则。

第一,只挑五本。

哪怕多一本,让它共享这份荣誉的位子也没有,也没有为那些差不多靠边者准备优秀奖。

五个位子,五本书。

第二,我没有将自己的书排除在竞争行列之外。

如果我要评判别人的书,当然也不能放过自己的。

这两个原则已经相当公平而严格了,因此我在其他方面就可以偷点懒:

我不打算对名单上的图书按重要性从高到低排座次(其他几个名单也一样)。

我的评判粒度是“在名单上”和“不在名单上”。

每个名单里,我都以年代为序,本文的单子里,自然就是出版日期。

言归正传,下面揭晓我评选的过去出版的最重要的五本C++图书:

《TheC++ProgrammingLanguage》,作者BjarneStroustrup,Addison-Wesley出版社。

1986年首版,1991年再版,1997年第三版,2000年特别版。

对于C++老人们来说,此书的首版是打开知识大门的钥匙。

目前的版本已经膨胀到千页以上,增加了很多那时候还不存在的特性,如模板、异常、多继承等,不过未提及标准模板库;

显然首版——也是我逐页阅读过的唯一版本——更易驯服,只有328页。

身处80年代后半页的C++程序员,对这本书的完全旅行是必不可少的,它对早期的C++从业者和追梦人的重要影响,怎么评价都不过分。

即使介绍C++的图书满天飞的现在,我仍然推荐专业开发人员阅读这本书(当前版本),因为我认为无论就C++本身,还是如何用好C++来说,它都是最全面的参考书。

Stroustrup因为吝于词句的写作风格而遭诟病,大家都知道我说过,如果阅读TC++PL(译者注:

即TheC++ProgrammingLanguage的简称。

此书行文简洁)时,你无意忽略了哪怕一个句子,就有可能丢掉了很重要的东西(再想想目前版本千页以上的篇幅,你就能明白我为什么说它是最全面的参考书了)。

然而,精炼恰是这本书无与伦比的魅力之一。

比如,首版中对自赋值处理方法的说明,就再好不过证明了这一点:

if(this==&

a)return;

 

//bewareofs=s;

首版《EffectiveC++》里,我在同样问题上花费了了五页半的篇幅。

你不得不为这样一本半行注释就解决问题的图书倾倒。

《EffectiveC++》,作者ScottMeyers,Addison-Wesley出版社。

1992年首版,1998年再版,2005年第三版。

它是超级天才的杰作!

哦,不要吐,别在意。

我和此书都很幸运,它生逢其时。

1991年前后,大部分程序员已经掌握了语言基础,能做到根据需求编写C++程序,但同时总觉得自己无法避免看似可以避免的诸多问题。

这是业界第一本专注于如何深入使用C++,全力帮助开发者解决常见问题,最好地使用非C特性(如构造器、析构器、继承、虚函数和类内存分配器等)的图书。

在这本书里,一反常态,不像当时大多数人将重点放在讨论C++的灵活性上,我采用了一种很特别的指导式思路来写作。

以我的经验判断,我认为程序员渴望找到强能有力的办法来控制C++的灵活多变,因此我要告诉他们究竟该做什么。

这本书做到了。

“一定要这么做”,“千万不要那样干”。

一代程序员将这些原则熟记于心,也催生了不少协助性工具。

比如GnuC++编译器,甚至设置了《EffectiveC++》指导原则的检测警告选项[注1]。

此书的一个重要特点——直到写作我的第二本书(《MoreEffectiveC++》)难以为继时,我才深入领会到——是其条款内容短小精悍,这样,读者坐公交车、火车,等待会议开始,甚至我曾经说过的坐在马桶上时都可以阅读这本书。

《DesignPatterns》,作者ErichGamma、RichardHelm、RalphJohnson和JohnVlissides。

Addison-Wesley出版社,1995年。

它本身不是一本针对C++的书,但它对使用C++以及其他任何面向对象编程语言进行良好设计都产生了深远影响。

此书在专业软件开发人员中发起了模式启蒙运动,而且提出了一系列至今仍居常用模式词汇表核心地位的设计模式[注2]。

如果你熟悉命令(Command)、访问者(Visitor)、装饰(Decorator)或单例(单态,Singleton)等模式——甚至已经深入掌握了设计模式,那么基本上可以肯定你读过这本书,我们应该感谢它。

此书中提到的模式,至今仍是C++技术界的热门话题。

例如HerbSutter于2003年9月,在其C/C++UsersJournal专栏提出了观察者(Observer)模式新的实现方法,AndreiAlexandrescu也分别于2005年4月和6月,在其C/C++UsersJournal专栏对这个模式做过讨论。

《InternationalStandardforC++》,ISO/IEC。

1998年首版,2003年第二版。

标准类资料读起来枯燥乏味,但必须有这样的东西去定义什么是C++,什么不是C++,这本书就担此重任。

在这以前,若想知道C++的正确实现,最好要读MargaretEllis和BjarneStroustrup合著的《TheAnnotatedC++ReferenceManual》(即著名的ARM,Addison-Wesley1990年版),并用不同的编译器检查代码,得想方设法理解BjarneStroustrup的意思(如通过读他的书)。

1998年版的C++标准不能回答所有问题(任何资料都做不到),比如,vector的内存布局必须与C数组兼容吗?

[注3]但它仍不失为一本C++权威参考书,无论是为编程实现还是语言使用者,都在标准化上做出了巨大努力。

2003年出的第二版,实际上是一个Bug修复更新版,更像是1.1而不是2.0版本,但它也是一个语言官方规范修订本。

《ModernC++Design》,作者AndreiAlexandrescu。

Addison-Wesley2001年版。

设计模板的初衷是实现类型的容器(“containersofT”),但它能做的远不仅仅这点。

实际上,在Alexandrescu的书出现之前,1998版C++标准的STL部分要求的模板实现就远远超出“类型的容器”。

但《ModernC++Design》的出现,才真正为C++技术界打破了模板的牢笼。

此书影响深远,堪称新旧两代C++程序设计的分水岭;

此后,“modernC++”一般都被用来专指采用了因此书而普及的模板技术的代码。

通过Google搜索包含“modernC++”的新闻组帖子,1985到2000年共有662个结果,而从2001年到现在,则有3200个。

尽管无关于这本书在C++历史上的重要性,但我想有一点仍然值得提及,那就是在Alexandrescu写这本书的时候,他还找不到一个支持这本书的代码包含的所有C++标准的编译器!

当你再次浏览这个名单的时候,请记得我是Addison-Wesley的签约作家,这个身份使我有机会免费获得Addison-Wesley出版的任何优秀图书。

因此,可能相对于其他出版社来说,我更熟悉的是Addison-Wesley的图书。

不过,如果其他出版社有图书震撼了C++世界,我想我肯定也会听说过。

在本系列的下一篇文章里,我将选择C++历史上最重要的非图书出版物(如杂志的文章等)。

注1

即:

-Weffc++。

注2

一直以来,我都有意在Google上搜索网页和新闻组最常提及的模式名,结果我发现多年来,20个最频繁提及的模式名,绝大部分出自这本书。

这充分证明这本10年高龄的图书经久不衰。

注3

是的。

评论

#dj0628 

发表于2007-09-2111:

17:

55 

IP:

221.136.65.*

好,要看。

#duyanning 

41:

53 

124.115.171.*

没看过TC++PL就看别的C++书,没什么意义。

看过TC++PL再看别的C++书,更没什么意义。

#yshuise 

发表于2007-09-2114:

44:

35 

218.26.177.*

duyanning发表于2007-09-2111:

53IP:

124.115.171.*

===========================

TC++PL是一本参考书,没有像你那说得那么神奇,同其他书式互为补充的。

比如对模板的叙述不如《ModernC++Design》,也没有怎么说模式。

c++归根结底是门语言,招式不是一切。

#healer_kx 

48:

58 

202.108.130.*

最讨厌胡说八道的人了,意义是你说的算的啊?

#Azureus 

发表于2007-09-2115:

08:

56 

221.12.171.*

没看过TC++PL,但是看过thinkinginC++和C++Primer

感觉这两本书也不错

前面一本书是侧重thinking,即C++中的思想,另一本书更广泛,实现细节也非常的详细.然而思想并不像thinking一样从头到尾,而是在过了前面的几章语法细节之后才开始多起来的.

DesignPatterns里面也介绍了各种招式,然而思想也是有的,比如说在书中就涉及到每种模式设计出来的思想,优劣.然而要看懂这本书,实在是要结合项目.

Effective/MoreEffectiveC++看了之后很有助于找工作(很多公司搞的面试题基本上这里都能找到).如果能结合起来InsidetheC++ObjectModel,理解会更加深刻.

<

InternationalStandardforC++>

还没看过.

看这些书,可能效果并不明显,然而等到三个月或者一个项目做完了之后,就会发现这些基础的强大作用了.有点像练习武功秘笈中的易筋经之类的内功,效果不是立竿见影的,所以要沉下心来看.

通过这两年的工作,感觉很多时候用C++的时候,在做项目,一定要用这些书上的很理论化的思想作指导.这样做下项目来,才能慢慢地体会到C++思想的妙处.虽然有些死板,然而效果却好.

10:

52 

=====================

你说了算

;

11:

16 

觉得Sutter的三本书不错,effictivec++相对于是基础的。

15:

37 

thinkinginc++第一卷相当垃圾。

#kybd2006 

26:

12 

121.35.254.*

赞同,工作快一年了,DesignPatterns的模式很多都没体会,看不懂,也静不下心来看,Effective/MoreEffectiveC++讲的很精辟,能解决工作中遇到的很多问题。

41 

#healer_kx发表于2007-09-2114:

58IP:

202.108.130.*

==============================

呵呵,得是没看过?

35:

40 

1)看thinkinginC++,那你还是赶快thinkinjava去吧。

这可是BruceEckel自己的结论。

2)相比TC++PL,C++Primer招式多而心法少,更像是字典。

发表于2007-09-2116:

32:

26 

=====================================

真奇怪,大家各人的悟性不同,学习方法不同,你觉得好,有成绩.然而学习C++有成些成绩的又不是你一个.你又不是topN.

C++Primer本来就是介绍了C++中的各种细节,像本字典有何不妥?

大家定位不同.等到C++Primer到了后面的章节的时候,思想就有了.而且即使开始在介绍细节的时候,也是有淡淡的介绍思想的语言.只是为了方便初学者入门,所以才不会像thinkinginC++一样一开始就大力推OO的概念.

而且C++Primer定位字典有何不好?

如果要想再学习思想上面的内容,上面不是还列举了其他的各种思想方面的入门书吗?

TC++PL难道心法就包罗万象了?

thinkinginC++的作者后来又写了JAVA,他可能觉得JAVA是种更纯粹的OO语言,而且他的思想也更成熟,所以有这样的推荐也不为怪.不见得就说thinkinginC++这本书差.

#ITshu 

发表于2007-09-2117:

22:

44 

221.192.237.*

感谢推荐

#wujian53 

发表于2007-09-2200:

50:

34 

59.59.203.*

C++Primer是一个入门书,当然是介绍语言细节比宣传思想重要。

发表于2007-09-2213:

58:

39 

==========================

你这话怎么还酸酸的啊?

TC++PL又不是我写的,C++Primer也不是你写的。

你怎么这么搞笑呢?

我说C++Primer没有TC++PL好,又不是说看C++Primer学C++的人比看TC++PL学C++的人档次低。

#zqdong520 

发表于2007-09-2321:

05:

09 

220.234.138.*

我真的很落伍

5断想之二:

C++历史上最重要的文献

在本系列的上一篇文章里,我列出了我认为最重要的五本C++图书,但大量有关C++的重要文献并非来自图书。

比如期刊、杂志、网络上的文章;

博士论文、会议纪要;

新闻组帖子;

博客;

标准化文档等很多很多。

它们对C++的进步与繁荣作出了巨大贡献。

我没有读全,甚至谈不上读了大多数,但作为C++的长期关注者,我还是阅读了很多这类文献。

在本期里,我将评选C++历史上最重要的五部非图书类文献。

和上期评选图书一样,我仍然将数量限制为五,尽管我没有写出过重要到能上这个榜的东西,但仍然将自己列入了候选队伍。

以下文献按时间为序。

一个让我无可回避的逻辑范畴两难问题是:

如果文献A的思想对C++直接影响很小,但文献B的作者读到了A,将这个思想引入了B并产生了巨大影响,那么到底哪个文献更重要,A(“发明者”)还是B(“繁荣者”)?

我最终选择了B,并不是因为这种做法天然就正确,而是因为我不想花力气拼命追查下列文献作者的思想是否从别的文献继承而来[注释1]。

反过来,我随便翻到C++语言规范的某页。

大家知道,constmemberfunctions里的const是不彻底的:

指针数据成员自动变为const,但指针所指的数据本身不会。

借鉴这个规定,我假设公布在下面的名单里的文献重要,而忽略它们引用的基础物(以及我所不知的其他文献)。

当然,从C++本身来说,这可能不是正确的做法,但易于实现,所以我也这么干了[注释2]。

在详细解说名单之前,我想请各位发发善心,允许我为《C++Report》——曾经为C++作出了最重大贡献的期刊——说几句悼词(如果你不那么仁慈,就请直接跳过去阅读后面内容吧)。

在其存在的大部分时期(1989-2000)里,《C++Report》一直是C++推动者和鼓吹者纸张写作的乐园(在此期间,首倡电子写作的是Usenet新闻组comp.lang.c++,后来还有comp.std.c++和comp.lang.c++.moderated)。

在《C++Report》发表文章的人里,有些名字你可能听说过(比如我上期列出的“最重要的C++图书”的作者),更多的可能你就不知道了(譬如下面要提到的一些文献的作者,以及——算了,名单太长,简直没办法开始。

我知道,如果开了头列出一些名字,那就暗示着未列出的人没列出的那么重要,这样一来我的麻烦就大了。

所以干脆一个不提,但请相信我,《C++Report》有生之年一直相当兴盛,它吸引了这个领域最好的写作群体——都是最有兴趣,也是最有实力去写作的人)。

《C++Report》关门的时候,很多专栏作家投向了《C/C++UsersJournal》,但这个杂志从来没有像《C++Report》那样吸引过我;

现在,CUJ也停刊了。

《C++Report》留给像我这样整天胡说八道的老怪物们的,就只有面对时光飞逝的无奈哀叹了。

唠叨这么多,我感觉好点了,还是继续说我的最重要非图书类文献名单吧:

《ProgramminginC++,RulesandRecommendations》,作者是Ellemtel电信系统实验室的MatsHenricson和ErikNyquist,1992年。

在我90年代早期前后的一些文章里,我提到过当时很多程序员渴求如何驾驭C++威力方面的指导意见,他们最感兴趣的是告诉他们该做什么、不该做什么的编程引导手册。

几乎在我的《EffectiveC++》尝试提供这方面指导的同时,MatsHenricson和ErikNyquist在互联网上发布了他们写的编程手册。

其实在此之前,这本手册就出来一段时间了,但

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 党团建设

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1