首页>参考读物>计算机科学与技术>软件与程序设计

Exceptional C++ (英文版)
作者 : Herb Sutter
丛书名 : C++设计新思维
出版日期 : 2006-03-03
ISBN : 7-111-18369-X
定价 : 29.00元
扩展资源下载
扩展信息
语种 : 英语
页数 : 215
开本 : 16开
原书名 : Exceptional C++: 47 Engineering Puzzles, Programming Problems, and Solutions
原出版社: Addison Wesley
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

本书中的工程难题和编程问题将帮助你成为最优秀的C++程序员。
  每个问题都按照难度排列,并且为了说明微妙的编程错误和设计思路而精心设计。
  针对每个问题,本书都将剖析代码、指明错误并告诉你如何修正它们。
  快来和C++大师一起修炼技能,从而达到编写高性能、高效率、健壮的C++代码的层次和级别。

  本书英文支持网页:http://www.gotw.ca/publications/mxc++.htm

图书特色

图书前言

“C++设计新思维”丛书前言
  自C++诞生尤其是ISO/ANSI C++标准问世以来,以Bjarne Stroustrup为首的C++社群领袖一直不遗余力地倡导采用“新风格”教学和使用C++。事实证明,除了兼容于C的低阶特性外,C++提供的高级特性以及在此基础上发展的各种惯用法可以让我们编写出更加简洁、优雅、高效、健壮的程序。
  这些高级特性和惯用法包括精致且高效的标准库和各种“准标准库”,与效率、健壮性、异常安全等主题有关的各种惯用法,以及在C++的未来占据更重要地位的模板和泛型程序设计技术等。它们发展于力量强大的C++社群,并被这个社群中最负声望的专家提炼、升华成一本本精彩的著作。毫无疑问,这些学术成果必将促进C++社群创造出更多的实践成果。
  我个人认为,包括操作系统、设备驱动、编译器、系统工具、图像处理、数据库系统以及通用办公软件等在内的基础软件更能够代表一个国家的软件产业发展质量,迄今为止,此类基础性的软件恰好是C++所擅长开发的,因此,可以感性地说,C++的应用水平在一定程度上可以折射出一个国家的软件产业发展水平和健康程度。
  前些年国内曾引进出版了一大批优秀的C++书籍,它们拓宽了中国C++程序员的视野,并在很大程度上纠正了长期以来存在于C++的教育、学习和使用方面的种种误解,对C++相关的产业发展起到了一定的促进作用。然而在过去的两年中,随着.NET、Java技术吸引越来越多的注意力,中国软件产业业务化、项目化的状况愈发加剧,擅长于“系统编程”的C++语言的应用领域似有进一步缩减的趋势,这也导致人们对C++的出版教育工作失去了应有的重视。
  机械工业出版社华章分社决定继续为中国C++“现代化”教育推波助澜,从2006年起将陆续推出一套“C++设计新思维”丛书。这套丛书秉持精品、高端的理念,其作译者为包括Herb Sutter在内的国内外知名C++技术专家和研究者、教育者,议题紧密围绕现代C++特性,以实用性为主,兼顾实验性和探索性,形式上则是原版影印、中文译著和原创兼收并蓄。每一本书相对独立且交叉引用,篇幅短小却内容深入。作为这套丛书的特邀技术编辑,我衷心希望它们所展示的技术、技巧和理念能够为中国C++社群注入新的活力。


荣耀
2005年12月
南京师范大学
www.royaloo.com


前   言
  《Exceptional C++》通过例子向你展示如何实施可靠的软件工程。本书包括因特网上流行的C++专题“Guru of the Week”(或简写为GotW)前30个议题的扩充版本,并补充了大量的其他材料。“Guru of the Week”包含一系列独立的C++工程问题和解决方案,它们描述了具体的设计和编程技术。
  本书并非盛有代码谜题的摸彩袋,它首先是对现实世界的C++企业软件设计的指南。它使用了问题/解决方案的形式,因为这是我知道的将您—文雅的读者—引入问题背后的思想和指导方针背后的理由最有效的方式。尽管这些条款涵盖了形形色色的主题,然而你会注意到反复出现的主题集中于企业级开发议题上,尤其是异常安全、健全的类和模块设计、适当的优化以及编写遵从标准的可移植代码。
  我希望你发现这些内容对你的日常工作有用,我还希望你至少从中发现一些极好的思想和优雅的技术,并且在阅读本书的过程中有时突然喊出“啊哈,原来如此!”是谁说软件工程枯燥乏味的?

如何阅读本书
  我期望你已经掌握了C++基础知识,如果你还没有,可以从一本介绍性和概览性的好书(像Bjarne Stroustrup的《The C++ Programming Language》(第3版)或Stan Lippman和Jos巈 Lajoie合著的《C++ Primer》(第3版)这样的经典著作都是不错的选择)开始学习,然后选读一本编程风格指南,例如Scott Meyers的经典著作《Effective C++》(我发现基于浏览器的CD版方便且实用)。
  书中的每一个条款都以谜题或问题的形式呈现,并带有一个介绍性的头部,如下所示:
  标题和难度等级(通常从3~,最高为10)提示你将要遭遇到什么。注意,难度等级只是我自己预期大多数人认为问题有多难的主观猜测,因此,你也许会发现对你而言一个难度等级为7的问题比一个难度等级为5的问题更简单。话虽如此,当你看到一个难度为的怪物浮出水面时,最好还是做最坏的思想准备。
  你无需按顺序阅读每一个小节和问题,但有几个地方存在一些相关问题的“小型系列”,你可以看到它们被标以“Part 1”、“Part 2”等,有些地方甚至多至“Part 10”。最好按组阅读这些小型系列。
  本书包含很多指导方针,在这些指导方针中,以下单词通常传达特别的含义:
  * always:这是绝对必需的。永远恪守之。
  * prefer:这通常是正确的方式。只有当某种情形有着特别的正当理由时才使用别的方式。
  * consider:这可能有用也可能没用,不过它值得考虑。
  * avoid:这通常不是最佳方式,甚至可能有危险。寻求替代方案,只有当某种情形有着明确的保证时才这么做。
  * never:这极其糟糕,想都不要想,否则会成为你职业生涯的绊脚石。
  最后,关于URL有必要多说一句:在Web上,东西会动来动去。尤其是,我无法控制的一些内容会动来动去。这使得在印刷书籍上刊印随意的Web URL就变成了真正的痛苦:恐怕在该书下厂印刷之前那些URL就已经过时了,更不要说等它在你的书桌上躺上5年之后了。当我在本书中引用他人的文章或Web站点时,我是通过自己的Web站点(www.gotw.ca)上的URL做到这一点的—我自己的Web站点是我所能控制的,它只包含对实际Web网页的重定向链接。如果你发现印刷在本书中的一个链接不再有效,请写邮件告诉我,我将更新该链接,使其指向新的网页位置(如果我还能找到该网页的话),或者告诉你该网页已不复存在(如果我找不到的话)。不管怎么说,本书的URL将会保持为最新,尽管在这个因特网世界中印刷媒体的日子是如此难过。呜呼!

来龙去脉:GotW与PeerDirect
  C++“Guru of the Week”系列已经由来已久。GotW最初创建于1996年底,为我们自己在PeerDirect的开发团队提供有趣的挑战和继续教育。我编写它是为了提供有趣味的学习工具,包括对继承和异常安全之类特性的正确用法的讲解。随着时间的推移,我还将它作为一种工具,用于向我们的团队介绍C++标准会议正在进行的改动。从那以后,GotW作为因特网新闻组comp.lang.c++.moderated的定期专栏对一般C++公众开放,在那儿你可以找到每一个新议题的问题和答案(以及大量有趣的讨论)。
  在PeerDirect用好C++非常重要,这与在你的公司用好C++的重要性有很多相同的理由,尽管要达到的目标可能并不相同。我们构建用于分布式数据库和数据库复制的系统软件,在这些领域,诸如可靠性、安全性、可移植性、效率,以及其他很多企业级议题,都是生死攸关的考虑。我们编写的软件要能够移植到不同的编译器和操作系统上,当发生数据库事务死锁、通信中断以及程序异常时,它要保持安全、强健。顾客用它来管理位于智能卡和pop终端或PalmOS和WinCE设备上的微型数据库,或管理部门级Windows NT和Linux、Solaris服务器,甚至管理Web服务器和数据仓库的大规模并行Oracle后端。这些都使用同样的软件、同样的代码,对可靠性有着同样的要求。现在,当我们费力地工作于大量的密集而未加注释的代码之上时,就会面临可移植性和可靠性的挑战。
  对于读者中过去几年来已经读过因特网上“Guru of the Week”的人,我有两句话要说:
  * 感谢你们的关心、支持、电子邮件、赞扬、纠正、评论、批评、提问,特别感谢你们对GotW系列印行成书的要求。它来了,希望你们喜欢。
  * 本书包含的内容比你在网上看过的多得多。
  《Exceptional C++》并不只是对已经浮现于网络空间的陈旧的GotW议题的剪贴。所有问题和解决方案都已在相当大程度上修订和重写,例如,条款8到条款17讨论的异常安全起先出现于单个GotW谜题中,现在则变成了一个具有10个部分的小型深入系列。每一个问题和解决方案都已经被检视,使其跟上修改后的正式C++标准。
  所以,如果你以前是GotW的定期读者,本书中仍然有大量的新东西。再一次对所有忠实的读者表示感谢,希望这份材料能够帮助你继续磨炼、扩展你的软件工程和C++编程技能。

致谢
  首先当然要感谢comp.lang.c++.moderated 上的所有GotW的读者和热爱者,尤其是那些参加为本书起名竞赛的胜出者。有两位对引导我们定出最终书名帮助尤巨,我要特别对他们表示感谢:Marco Dalla Gasperina建议取名“Enlightened C++”,Rob Stewart则建议取名“Practical C++ Problems and Solutions”。鉴于这里反复强调异常安全,更进一步加入双关语“exceptional”是自然而然的。
  非常感谢丛书编辑Bjarne Stroustrup,感谢Marina Lang、Debbie Lafferty以及Addison Wesley Longman的其余编辑人员,感谢他们对此项目投入持续的热情以及在1998年Santa Cruz C++标准会议上给予的周到的招待。
  我还要感谢很多审稿人(其中不少人是C++标准委员会的成员),他们提供了深刻而尖锐的评论,对改善你将要看到的正文内容很有帮助。特别感谢Bjarne Stroustrup和Scott Meyers,以及Andrei Alexandrescu、Steve Clamage、Steve Dewhurst、Cay Horstmann、Jim Hyslop、Brendan Kehoe、Dennis Mancl,感谢他们宝贵的洞察力和评论。
  最后,特别感谢我的家人和朋友,感谢你们一直以各种方式陪伴着我。

Herb Sutter
1999年6月

图书序言

这是一本非凡的书,不过直至快要读完全书我才意识到它是多么不平凡。这可能是第一本写给已经熟悉C++—熟悉C++的一切—的人看的书。从语言特性到标准库组件再到编程技术,本书从一个主题跳到另一个主题,总是使你处于些微失衡的状态,总是确保你专心致志。就像现实C++程序一样,类设计撞上虚函数的行为,迭代器协定碰到名字查找规则,赋值操作符擦上异常安全,编译依赖遭遇导出模板。就像在现实程序中的一样,语言特性、库组件和编程技术形成的混乱的大漩涡,精彩而令人眩晕。
  我将GotW(Guru of the Week)发音为“Gotcha(got you,抓到你了)”可能并无不妥。当我将自己针对书中测验给出的解决方案与Sutter的答案进行比较时,我往往会落入他(和C++)设置的陷阱中,次数之多,使我羞于承认。每当我犯错时,我几乎能看到Herb面带微笑轻声说道:“Gotcha!”也许有人争论这证明我对C++知之甚少,另有人可能宣称这说明C++太复杂,以至于任何人都很难精通它。我则认为这表明在使用C++进行工作时,你必须小心谨慎地思考你正在做的事情。C++是一门威力极大的语言,它被设计用于解决需求苛刻的问题,尽可能细致地磨练你在语言、库和编程惯用法方面的知识,至关重要。本书讨论主题范围之广,内容安排之独特(采用了基于测验的格式),对你的磨练过程将会助一臂之力。
  C++新闻组的老读者都知道选出“Guru of the Week”有多么困难,那些有经验的参与者对此更是深有体会。尽管在网上每周只能产生一名guru,然而有了本书提供的知识撑腰,每当编程时你都可冀望产出有着guru质量的代码。

Scott Meyers
1999年6月

作者简介

Herb Sutter:Herb Sutter:  Herb Sutter是广受赞誉的Exceptional三卷本 (《Exceptional C++》、《More Exceptional C++》和《Exceptional C++ Style》)的作者,还曾发表了上百篇软件开发方面的技术文章和论文。他是ISO C++标准委员会的主席、《C/C++ Users Journal》的撰稿编辑和专栏作者。同时,他还担任Microsoft Visual C++架构师,负责C++语言在.NET编程环境扩展 (C++/CLI) 方面的工作。

图书目录

Item 1: Iterators.
Item 2: Case-Insensitive Strings-Part 1.
Item 3: Case-Insensitive Strings-Part 2.
Item 4: Maximally Reusable Generic Containers-Part 1.
Item 5: Maximally Reusable Generic Containers-Part 2.
Item 6: Temporary Objects.
Item 7: Using the Standard Library (or, Temporaries Revisited).
EXCEPTION-SAFETY ISSUES AND TECHNIQUES.
Item 8: Writing Exception-Safe Code-Part 1.
Item 9: Writing Exception-Safe Code-Part 2.
Item 10: Writing Exception-Safe Code-Part 3.
Item 11: Writing Exception-Safe Code-Part 4.
Item 12: Writing Exception-Safe Code-Part 5.
Item 13: Writing Exception-Safe Code-Part 6.
Item 14: Writing Exception-Safe Code-Part 7.
Item 15: Writing Exception-Safe Code-Part 8.
Item 16: Writing Exception-Safe Code-Part 9.
Item 17: Writing Exception-Safe Code-Part 10.
Item 18: Code Complexity-Part 1.
Item 19: Code Complexity-Part 2.
CLASS DESIGN AND INHERITANCE.
Item 20: Class Mechanics.
Item 21: Overriding Virtual Functions.
Item 22: Class Relationships-Part 1.
Item 23: Class Relationships-Part 2.
Item 24: Uses and Abuses of Inheritance.
Item 25: Object-Oriented Programming.
COMPILER FIREWALLS AND THE PIMPL IDIOM.
Item 26: Minimizing Compile-time Dependencies-Part 1.
Item 27: Minimizing Compile-time Dependencies-Part 2.
Item 28: Minimizing Compile-time Dependencies-Part 3.
Item 29: Compilation Firewalls.
Item 30: The “Fast Pimpl” Idiom.
NAME LOOKUP, NAMESPACES, AND THE INTERFACE PRINCIPLE.
Item 31: Name Lookup and the Interface Principle-Part 1.
Item 32: Name Lookup and the Interface Principle-Part 2.
Item 33: Name Lookup and the Interface Principle-Part 3.
Item 34: Name Lookup and the Interface Principle-Part 4.
MEMORY MANAGEMENT.
Item 35: Memory Management-Part 1.
Item 36: Memory Management-Part 2.
Item 37: auto_ptr.
TRAPS, PITFALLS, AND ANIT-IDIOMS.
Item 38: Object Identity.
Item 39: Automatic Conversions.
Item 40: Object Lifetimes-Part 1.
Item 41: Object Lifetimes-Part 2.
MISCELLANEOUS TOPICS.
Item 42: Variable Initialization—Or Is It
Item 43: Const-Correctness.
Item 44: Casts.
Item 45: bool.
Item 46: Forwarding Functions.
Item 47: Control Flow.
Afterword.
Bibliography.
Index.

教学资源推荐
作者: Brian W.Kernighan,Dennis M.Ritchie
作者: 刘燕君,刘振安,孙忱
作者: [美] 凯·霍斯特曼(Cay Horstmann) 兰斯·尼塞斯(Rance Necaise) 著
作者: [美]梁勇(Y. Daniel Liang)阿姆斯特朗亚特兰大州立大学 著
参考读物推荐
作者: (美)Matt Massie Bernard Li Brad Nicholes Vladimir Vuksan 著
作者: 乔什·洛斯皮诺索(Josh Lospinoso)著
作者: [美] 大卫·博里基(Dawid Borycki) 著