首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训

Exceptional C++ Style中文版

  • 书名:Exceptional C++ Style中文版
  • 作者:萨特(Sutter,H.)
  • 来源:人民邮电出版社
  • 出版时间:2006年01月
  • ISBN:7-115-14225-4
  • 定价:39元

看 书 评 论 收 藏打 分 购 买

图书版权归出版社和作者所有,CSDN & DearBook独家提供试读和连载
内容介绍:
本书中,C++大师Herb Sutter通过40个编程问题,使读者不仅“知其然”,更要“知其所以然”,帮助程序设计人员在软件中寻找恰到好处的折中,即讨论如何在开销与功能之间、优雅与可维护性之间、灵活性与过分灵活之间寻找完美的平衡点。本书是围绕实际问题及其解决方案展开论述的,对一些至关重要的C++细节和相互关系提出了新的见解,为当今关键的C++编程技术(如泛型编程、STL、异常安全等)提供了新的策略。本书的目标是让读者在设计、架构和编码过程中保持良好的风格,从而使编写的C++...

最近评论

精 彩 导 读

布达佩斯,匈牙利的首都。一个炎热的夏日傍晚。穿过美丽的多瑙河望去,余晖中的东岸景色优美恬静。 在本书封面上色彩柔和的欧洲风光中,哪栋建筑首先映入你的眼帘?几乎可以肯定,是照片左边的国会大厦。这栋巨大的新哥特式建筑以它优美的圆穹、直插天际的尖塔、不计其数的外墙雕塑以及其他华丽装饰一下攫住了你的目光,而它更引人注目之处在于,它与四周建筑在多瑙河畔那些刻板的实用建筑形成了极其鲜明的对照。 为什么会有这么大的差异呢?一方面,国会大厦是在1902年竣工的,而其他味同嚼蜡的建筑则大部分都是在二战以后建成的。 “啊哈,”你可能会想,“这的确解释了为什么差异如此之大。然而这与本书到底有什么关系呢?” 毫无疑问,风格的表达与你在表达风格时灌注的哲学和思维方式是有很大关系的,这一点不管对于建筑学还是对于软件架构来说都同样适用。我相信你们都见过像封面上国会大厦那样宏伟而华丽的软件,我同样相信你们也见过仅能工作而且一团乱麻似的软件。极端一点说,我相信你也见过许多过分追求风格反而弄巧成拙的华而不实之作,和许多只顾尽快完成任务而毫无风格的“丑小鸭”(而且永远也不会变成天鹅)。 风格还是实用? 哪个更好? 不要太相信自己知道答案。一方面,除非你给出一个明确的标准,否则“更好”只是一个无意义的评价。对什么更好呢?在哪些方面更好呢?另一方面,答案几乎总是这两者的平衡,最开始总是“这取决于……”。 本书讨论的是如何在使用C++进行软件设计和实现的诸多细节方面找到最佳平衡点,如何更好地理解所拥有的工具和设施,弄清它们应该在什么时候应用。 快速回答:与四周索然无味的建筑相比,封面上的国会大厦是更好的建筑吗?其建筑风格更好吗?如果不加思索就给出答案,很可能你会说“当然”,但是别忘了,你还没有考虑其建造和修缮的代价呢:  建造。在1902年竣工之时,它是当时世界上最大的国会大厦。人们花费了难以想像的时间、不计其数的人力物力来兴建它,以至于许多人称它为“白象(white elephant)”,意思是耗资过大的美丽事物。考虑这样一个问题:比较起来,花费同样的投资能够建造多少幢周围那种不美观、单调或许干脆是令人厌烦的实用建筑?如果你是在一个工程进度压力远比这座国会大厦建造时代要大得多的行业工作,你又会怎么做?  修缮。你们中那些熟悉这座建筑的人会注意到照片中的建筑正在进行修缮翻新,而且这个工作已经持续了好多年,其间又极有争议地花费了巨量的资金。然而除了最近的这轮昂贵的修缮之外,之前还有多次修缮,因为遗憾的是,这座建筑外墙上的精美雕刻是由错误的材料制成的,其材料太过柔软了。在大厦建成后不久,这些雕刻成了人们持续进行修缮的主要内容,它们逐渐被替换为更为坚固而耐久的材料,这些华丽之物的大规模修缮自从20世纪初开始就一直没停过,持续了近一个世纪。 软件开发中的情形也与此类似,重要的是在建造的代价和获得的功能之间、在优雅与可维护性之间、在发展的潜在可能与过分追求华丽之间寻求合理的平衡。 使用C++来进行软件设计和架构时,我们每天都得面对这些类似的权衡。在本书讨论的问题当中有这样几个问题:使代码成为异常安全的就意味着将它变得更好了吗?如果是这样的,那么这里所谓的“更好”是指什么意义上的呢?什么时候它可能不是“更好”的呢?在本书中你会得到明确的答案。封装呢?封装是否令软件变得更好?为什么?什么时候封装反倒不能令软件变得更好?如果你想知道答案,继续往下读。内联是一项有益的优化吗?内联是什么时候进行的呢?(你在回答这个问题的时候可得十分小心了。)C++中的模板导出(export)特性与封面上的国会大厦有什么相通之处呢?std::string与多瑙河畔的巨型建筑又有何相通之处呢? 最后,在考虑了许多C++技术和特性之后,我们会用一整个部分来考察摘自公开发布的著名代码中的几个实际例子,看看代码的作者在哪些方面做得好,在哪些方面做得不好,以及什么样的替代方案可能在实用性与良好的C++风格之间取得更好的平衡。 我希望本书以及Exceptional C++系列的其他图书能够开阔你的视野,增加你有关许多细节及其相互关系的知识,让你进一步了解到如何在编写自己的软件时找到合理的平衡点。 请再看一眼封面上的照片,在照片的右上方,你会看到一个热气球。如果我们乘坐那样的热气球飞越城市的上空,整个城市的景色将尽收眼底。我们会看到风格跟实用是如何相互影响、相互依存的,我们也会知道如何去进行权衡并找到合理的平衡点,所有的决策将各得其所,构成一个富于生机的整体。 是的,我想布达佩斯是一个伟大的城市——充满着丰富的历史底蕴,充满着不尽的神秘喻义。 伟大的苏格拉底 古希腊哲学家苏格拉底通过提问来教他的学生们,他精心准备的问题是为了引导并帮助学生从已知的知识引出结论,并说明他们所学的东西是如何彼此相关、如何与他们现有的知识有着千丝万缕的联系的。这种教学方式后来变得如此有名,以至于我们称它为“苏格拉底方法”。苏格拉底的这种著名的教学方法能够吸引学生,让学生思考,并帮助学生从已知出发去引出新的东西。 本书与它的前面几本书(Exceptional C++ [Sutter00]和More Exceptional C++ [Sutter02])一样,正是借鉴了苏格拉底的做法。本书假定你在编写C++产品代码已有一些经验,书中使用了一种问答的形式来告诉你如何有效地利用标准C++及其标准库,特别地,我们将关注的中心放在如何用现代C++开发可靠的软件上。书中的许多问题都是从我以及其他人在编写C++产品代码时遇到的问题当中提炼出来的。问题的目标是帮助你从已知的以及刚学到的东西出发得出结论,并展示它们之间如何关联。书中给出的问题会展示如何对C++设计和编程问题作出理性的分析和判断,其中有些只是常见问题,有些不是那么常见;有些是非常单纯的问题,而有些则深奥一些;另外还有几个问题之所以放在书中只是因为……因为它们比较有趣。 本书涉及了C++的方方面面。我的意思并不是说它触及了C++的每个细枝末节(那可需要多得多的篇幅了),我只不过是说它是从C++语言和库特性这块大调色板上取色,并描绘出一幅图景,展示那些看似毫无瓜葛的特性如何编织到一起,从而构成常见问题的一个个漂亮解决方案。另外,本书还展示了那些看似无关的部分是如何互相之间盘根错节、存在着千丝万缕的联系的(即便有时你也许并不希望它们之间有什么联系),以及如何处理这些复杂关系。你会看到一些关于模板和名字空间的讨论,也会看到一些关于异常与继承的讨论,同样,另外还有关于坚实的类设计和设计模式的讨论,关于泛型编程与宏技巧的讨论等等。此外,还有一些实实在在的(而不是一些花边新闻式的边栏小字)条款用来向你展示现代C++中所有这些部分之间的相互关系。 Exceptional C++ Style遵循了Exceptional C++和More Exceptional C++两本书的传统:它通过短小精悍的条款的组织形式,并将这些条款再进一步分组为一个个的主题来介绍新知识。读过我的第一本书的读者会发现一些熟悉的主题,不过现在包含了新的东西,诸如异常安全、泛型编程以及优化和内存管理技术。我的几本书在主题上有部分重叠,但内容上并没有重复。本书沿袭了对泛型编程和高效使用标准库的一贯强调态度,包括一些重要的模板和泛型编程技术的讨论。 书中的大多数条款最初出现在杂志专栏上以及网上,尤其是我为C/C++ Users Journal和Dr. Dobb’s Journal,已停刊的C++ Report以及其他期刊所写的专栏文章,另外还有我的Guru of the Week[GotW]问题63到86。不同的是本书中的材料与最初的版本相比经过了重大的修订、扩展、校正和更新,因此这本书(以及www.gotw.ca网站上的勘误表)应该被当成原先那些文章的最新而且权威的版本。 预备知识 我假定读者已经知道一些C++的基础知识。如果不是这样,那就先去阅读一些好的关于C++介绍和概述的文章或书籍。像Bjarne Stroustrup的The C++ Programming Language [Stroustrup00]或者Stan Lippman和Josée Lajoie合著的C++ Primer(第3版)[Lippman98] ,这样的经典是良好的选择。接下来,一定要选择一本Scott Meyers的经典书籍(More)Effective C++[Meyers96, Meyers97]这样的风格指南,我发现这两本书基于Web浏览方式的CD版本[Meyers99]比较方便实用。 如何阅读本书 本书中的每一条都是以一个谜题或问题来展开的,都有一个介绍性的标题,如下: 第##条 难度:# 一段简短的介绍性文字,说明该条将要讨论的内容。 条题大致告诉你本条讨论的是什么,通常后面会跟有介绍性的或回顾性的问题[JG问题,JG是指新来的、级别较低的军官(少尉)],然后就是主要问题(即Guru问题)。注意,难度系数只是我针对特定主题对大多数读者而言的难度所作的一个大致推测,这就是说你可能会发现一个难度为7的问题对你来说却比一个难度为5的问题要来得简单。实际上我的前两本书:Exceptional C++ [Sutter00]和More Exceptional C++ [Sutter02]就曾不断地收到一些读者来信说:“嗨!第N条比它实际上要更难(简单)!”不同的人对于“简单”的评价标准各有不同。所谓难度系数只是因人而异的,任何条款的难度实际上都是取决于你所掌握的知识和经验,而其他人则可能觉得它更容易或更
line

网站简介广告服务网站地图帮助联系方式诚聘英才English问题报告

北京百联美达美数码科技有限公司  版权所有  京 ICP 证 020026 号

Copyright © 2000-2006, CSDN.NET, All Rights Reserved