More Exceptional C++ 中文版(lostmouse译,肖翔审校)即将出版,敬请关注!(这里提供译序、目录、序和前言)

yeka 2002-08-21 07:48:52
More Exceptional C++ 中文版(lostmouse译)将于本月底由华中科技大学出版社出版。定价:39.80元



与大师面对面(译序)
------------------


小提琴家穆特录制过一张唱片,里面收录的是贝多芬最伟大的两部小提琴作品。聆听那张唱片,你仿佛听见贝多芬在向你倾诉他对音乐艺术的理解和感悟、解答你对小提琴音乐创作的每一个疑问和困惑。为了向音乐爱好者推荐贝多芬的那两部名作,穆特为她的那张名碟加上了一个恰如其分的标题——“与贝多芬面对面”。

合上More Exceptional C++的瞬间,我的第一反应是为这部名作也加上一个与之类似的副题,然后,郑重地推荐给你。

是的,本书奉献给你的是又一位大师苦心孤诣的结晶。不同的是,这位大师来自你所关注的C++程序设计领域。对每一位C++爱好者或C++专业程序员来说,Herb Sutter的名字应该不会让人感到陌生。作为ISO/ANSI C++标准委员会的委员,Herb Sutter是C++程序设计领域屈指可数的大师之一;此外,他还是是深受程序员喜爱的技术讲师和作家。Herb Sutter在互联网上主持的Guru of the Week专栏广受欢迎,几乎成为每一位C++程序员的网上必读。本书就是Guru of the Week的最新总结和精华。

本书的主要特点可以反映在我给它所加的副题中。曾经是身经百战的专业程序员,如今又积极从事程序设计的普及教育工作,Herb Sutter最清楚程序员在提升技术功力的过程中的所想和所为。他既了解初学者的疑问和困惑,也对专业程序员日常工作中遭遇的陷阱和易犯错误了如指掌。因而,在本书中,Herb Sutter采用了独具匠心的“提问/解答”的方式来指导你学习C++的语言特性;在本书的每个专题中,Herb Sutter合理地设想出你的疑问和困惑,又有如神助地猜到了你的(可能是错误的)解答,然后给你以指点并呈现出最佳方案,最后,还提炼出解决类似问题的一般性原则。读了这本书,你仿佛和Herb Sutter这位大师面对面地进行了一场对话,亲历了他对你的指导和点拨。

关于本书的另一个特点,我想指出的是,作为C++标准委员会的委员,Herb Sutter在本书中强调了C++语言的最新标准和最新特性,强调了泛型程序设计和标准库的使用。在本书的所有示例中,Herb Sutter为我们提供的是清新的C++编程风格和纯正的现代C++代码和范例。

本书适合的读者对象是中高级程序员,但这并不说本书的内容高不可攀。作者并不是在讲述高深的语言特性和设计技巧,更没有对基础话题避而不谈;相反,有关基础知识的介绍、回顾和深化散见于本书的很多条款之中。只不过,这些条款的内容涉及的只是C++特性中的细节,它没有对C++的每一个特性、甚至某个特性中的每一个方面作全面的介绍。但是,只要你具备基本的C++功底和一定的程序设计经验,你完全可以理解和消化本书的所有内容。由于作者巧妙的组织和精心的选材,本书每一个条款的内容都完整而合理,它让你在深入学习C++语言特性的细节时事半功倍。

因而,我相信,无论是有一定基础的C++爱好者,还是身经百战的专业程序员,本书都会为你带来收获;在你的C++程序设计生涯中,它是你的案头不可或缺的C++专著之一。


致谢

能够翻译完这本书,要感谢我的妻子妞妞和儿子斗斗,是你们给了我工作的动力,多年来我未能陪伴在你们身边,你们不但给了我宽容,还依然给我了我不变的支持。感谢yeka,是你促成了我和华中科技大学出版社的愉快合作并给了我最直接的帮助。感谢xiaoxiang,你的细心审校使我获益颇多。感谢moonsea,即使是在我工作的时候,你也会不时地扰乱我的心绪,迫使我无法继续工作——正因为这样,我才得以不时地逃离枯燥的键盘和屏幕,偷得一刻闲暇。感谢本书作者Herb Sutter,在翻译本书的过程中,你对我的多次请教给予了耐心的解答——和大师的直接对话让我如沐春风。最后,感谢互联网上所有给予我帮助和鼓励的朋友们,lostmouse(我在专业论坛上的网名)希望,这本译作能成为我对你们最好的回馈;我更希望,你们能一如既往地帮助我,指出这本译作中我的每一个错误和疏漏。感谢你们!

於春景(lostmouse)
深圳蛇口,2002年4月


目录



序 vii
ix
前言

泛型程序设计与C++标准库 1
条款1:流 1
条款2:Predicates,之一:remove()删除了什么? 6
条款3:Predicates,之二:状态带来的问题 11
条款4:可扩充的模板:使用继承还是traits? 19
条款5:typename 32
条款6:容器、指针和“不是容器的容器” 36
条款7:使用vector和deque 46
条款8:使用set和map 53
条款9:等同的代码吗? 59
条款10:模板特殊化与重载 64
条款11:Mastermind 69

优化与性能 83
条款12:内联 83
条款13:缓式优化,之一:一个普通的旧式String 86
条款14:缓式优化,之二:引入缓式优化 90
条款15:缓式优化,之三:迭代器与引用 94
条款16:缓式优化,之四:多线程环境 103

异常安全议题及技术 115
条款17:构造函数失败,之一:对象生命期 115
条款18:构造函数失败,之二:吸收异常? 119
条款19:未捕获的异常 126
条款20:未管理指针存在的问题,之一:参数求值 132


条款21:未管理指针存在的问题,之二:使用auto_ptr? 135
条款22:异常安全与类的设计,之一:拷贝赋值 141
条款23:异常安全与类的设计,之二:继承 149

继承与多态 155
条款24:为什么使用多继承? 155
条款25:模拟多继承 159
条款26:多继承与连体双婴问题 162
条款27:(非)纯虚函数 167
条款28:受控的多态 172

内存及资源管理 175
条款29:使用auto_ptr 175
条款30:智能指针成员,之一:auto_ptr存在的问题 182
条款31:智能指针成员,之二:设计ValuePtr 187

自由函数与宏 201
条款32:递归声明 201
条款33:模拟嵌套函数 206
条款34:预处理宏 215
条款35:宏定义 218

杂项议题 223
条款36:初始化 223
条款37:前置声明 226
条款38:typedef 228
条款39:名字空间,之一:using声明与using指令 231
条款40:名字空间,之二:迁徙到名字空间 234

后记 245

附录A:(在多线程环境下)并非优化 247
附录B:单线程String实现与多线程安全String实现的对比测试结果 263

参考文献 271

索引 273






怎样才能成为专家?在我涉足过的所有领域,答案都一样:

1. 掌握基础知识。
2. 将相同的内容再学习一遍,但这一次,将你的注意力集中在细节上——这些细节的重要性,你头一次可能并没有认识到。

如果挑选了合适的细节来学习,并且彻底地掌握了它们,进而达到不再为之困惑的程度,你就离成为专家为期不远了。然而,除非已经成为了专家,你又怎么知道该挑选哪些细节来学习呢?如果有人已经为你挑选了合适的细节,你就会学得更快,并且乐在其中。

举个例子,我曾经参加过一次摄影学习班,授课的是一位很不错的摄影师,名叫Fred Picker。他告诉我们,摄影中仅有的两个困难的环节是:照相机该摆放在哪儿、何时该按快门。然后,他花了学习班的大部分时间教我们有关爆光、加工和冲印的技术细节——只有完全了解了这些细节,我们才能够很好地掌握摄影;而只有很好地掌握了摄影,我们去关注那两个“困难的”环节才有意义。

学习C++编程的细节,有一个特别引人入胜的方式,即:尽力去回答有关C++编程的问题。例如:

• f(a++); 和 f(a); ++a;的效果一样吗?
• 可以用迭代器去改变set的内容吗?
• 假设你正在使用一个名为v的vector,它占用的内存数量已经增长到让你担心的程度。于是你会想到去清除这个vector,将内存返还给系统。调用v.clear()可以完成这一使命吗?

你可能已经猜到,这些表面上看起来显而易见的问题,其答案一定是No——否则我也不会把它们提出来——但你知道答案为什么是No吗?你确信?

本书回答了这些问题。此外,它还回答了其它许多精心挑选的问题,这些问题针对的都是看起来很平常的程序。没有多少书籍具有本书这样的特色——当然,它的前

任Exceptional C++除外。有许多自封“高级”的C++书籍,但它们中的大多数要么只是针对专项主题进行了讨论——如果你只是想精通那些特定主题,而不是想深入研究日常编程中遇到的问题,那些书还不错——要么只是用“高级”这个词来引诱读者而已。

一旦透彻理解了这些问题和它们的答案,你在编程时就不必劳神于细节;你就尽可以将注意力集中在真正需要尽力解决的问题上。

Andrew Koenig
2001年6月




前言




古希腊哲学家苏格拉底通过向学生提问进行教学——他用那些精心构思的问题来指导学生,启发他们从已知得出结论;让他们认识到自己正在学习的事物如何相互联系,这些事物与他们已有的知识又如何联系。这种教学法如此出名,以致我们今天把它专称为“苏格拉底问答法”。如果让我们也从学生的角度来看问题,苏格拉底的教学法将将引导着我们,促使我们思考,帮助我们联系并应用现有的知识去获取新知。

本书如同它的前任Exceptional C++ [Sutter00]一样,借鉴了苏格拉底的教学法。它假设你目前正身处C++产品软件开发的某个领域,采用“提问/解答”的形式指导你如何有效地使用标准C++语言及其标准库——尤其是,如何运用现代C++中有效的软件工程理论来解决问题。这些问题大多直接取自于我和其他人在编写产品级C++代码时积累的经验,以所谓的“疑问”和“难题”的形式呈现给你。“疑问”的目的在于帮助你从现有的知识和刚刚学到的知识中得出结论,并展现它们之间如何相互关联。“难题”则向你展示如何去分析C++设计和编程上的论题——某些是常见的论题,某些并不常见;某些是浅显的论题,某些则比较深奥;还有一些论题之所以拿来讨论,是因为——唔,仅仅因为——它们很有趣。

本书覆盖C++的方方面面。但我没有说它触及C++的每一个细节——那将需要更多的篇幅——我是在说,本书提取了C++语言和标准库构件中的广泛素材,向你展示看似毫不相关的个体如何被综合利用起来,构成解决常见问题的新颖方案。它还展示了这些素
...全文
71 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
yeka 2002-09-03
  • 打赏
  • 举报
回复
谢谢小新:)
memeno 2002-08-29
  • 打赏
  • 举报
回复
电子版本的早出来了!!你们的速度太慢了
celeil 2002-08-28
  • 打赏
  • 举报
回复
叶卡老师出院了?祝老师身体快快恢复哦~
celeil 2002-08-28
  • 打赏
  • 举报
回复
哈哈~,华中又有本好书要出炉了。
tdotnet 2002-08-27
  • 打赏
  • 举报
回复
lostmouse 的effctiveC++翻译得不错,所以期待这一本!!!!!
navychen 2002-08-27
  • 打赏
  • 举报
回复
怎么MEC倒先出了?
earthharp 2002-08-22
  • 打赏
  • 举报
回复
gz
wangguoqian 2002-08-22
  • 打赏
  • 举报
回复
Exceptional C++ 呢?
Ashura 2002-08-22
  • 打赏
  • 举报
回复
不爽,C++标准库在哪里?
step_by_step 2002-08-22
  • 打赏
  • 举报
回复
好!
wxcwuxuchun 2002-08-21
  • 打赏
  • 举报
回复
关注
陈硕 2002-08-21
  • 打赏
  • 举报
回复
关注
dntq 2002-08-21
  • 打赏
  • 举报
回复
关注

590

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧