- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Imperfect C++ 中文版
——经过实践检验的现实编程解决方案
Matthew Wilson 著
荣耀 刘未鹏 译
序言
——不完美主义实践者的哲学
在本书中,C++语言技术与良好的实践方式占有同等重要的地位。本书并非仅仅讨论在某个特定场合下什么方案才是有效的或技术上正确的,更重要的还是要看最终哪种做法才是更安全的或者更切合实际的。本书要传达的意思有四个方面:
原则1——C++是卓越的,但并不完美。
原则2——穿上“苦行衣”。
原则3——让编译器成为你的仆从。
原则4——永不言弃,总会有解决方案的。
这“四项基本原则”构成了我所谓的“不完美主义实践者”的哲学。
C++并不完美
多年以前,一位为她最小的儿子的过分骄傲的心理感到不安的母亲曾这样教导说:“如果你打算将一些好的东西告诉别人,那么你最好也准备承认其中那些糟糕的成分。”谢谢你,母亲!
C++是一门杰出的语言。它支持高阶概念,包括基于接口的设计、泛型、多态、自描述的软件组件以及元编程(meta-programming)等。此外,凭借对低阶特性的支持,它在提供对计算机的精细控制方面,包括位操作、指针以及联合(union)等,也比大多数语言更有能耐。借助于这些范围宽广的能力,外加保持的对高效性的根本性支持,C++可以说是当今最杰出的通用编程语言[注1]。不过话说回来,C++并非完美无瑕,实际上远没到完美的程度,因而有了本书的名字——“Imperfect C++”(中文版)。
[注1]请注意,我并不是说C++在所有特定问题领域都是最佳语言。例如,我绝不会建议你使用C++去编写“专家系统”,Prolog才是这方面的合适人选。而在系统脚本方面Python和Ruby则当仁不让。此外,我们还得承认Java在企业级电子商务系统开发中确有过人之处。
由于一些很好的原因(有些是历史原因,也有些是当前的原因),C++不仅是一个折衷[Stro1994]的产物,而且还是一些互不相干、有时甚至是互不兼容的概念的混合体,因而其中必然存在着一些缺陷。有些缺陷只是鸡毛蒜皮,但有些就不是那么无关紧要了。许多缺陷都是从它们的“祖辈”那儿承袭而来的。其他则是由于语言将效率放在高优先级(幸好如此)才导致的。有些则可能是任何语言都无法摆脱的根本限制。正是由于如今的语言变得愈来愈复杂,也愈来愈多种多样,因而才出现了一些极有趣的问题,这些是任何人都始料未及的。
本书直面这种复杂的形势,坚信总能够克服复杂性,坚信控制权最终还是掌握在那些见多识广、经验丰富的计算机专家手中。我的目标是缓解那些使用C++的软件开发者日常经受的不知所措以及无法作出决断的痛苦之情。
本书致力于解决的并不是软件开发者因经验不足或知识不够而遇到的问题,而是这个职业中的所有成员,从初学者甚至到最有才干和经验的那些人,所共同遭遇的问题。这些问题中部分源于语言自身固有的不完美性,部分源于人们对语言所支持的一些概念的常见误用。无论如何,它们给我们所有人带来了麻烦。
本书并不仅仅是对语言中的不完美之处进行一些简单的论述并附带一些“别这么做”列表,你可以找到很多着眼于这方面的C++书籍。和它们不同,本书的重点在于如何为我所指出的缺陷(中的大部分)提供解决方案,并借此使得这门语言变得不再像它本来那么“不完美”。本书重在赋予开发者能量,讨论他们赖以谋生的手段——C++——中潜在的问题领域,给出了一些重要的相关信息,并为开发者提供了一些建议以及经过实践检验的技巧和技术,以帮助他们避免或应付这些问题。
苦行僧式编程
在我们阅读过的很多教科书中,即便是非常好的,也只是告诉我们C++能够提供的解决问题的手段,前提还得是你必须将C++中的有关特性有效地利用起来。然而,这些书常常又会在后面接着说道:“这样做其实没有实质性的意义”或者“严格来说那样做就稍微有点过头了”。不止一个以前的同事曾把我拖进类似的激烈争论之中。通常人们的理由可以归结为:“我是一个有经验的程序员,我并不会犯XYZ阻止我犯的那些错误,干嘛要为之烦神呢?”。
唉!
这个论点简直不堪一驳。我也是个有经验的程序员,但我每天至少会犯一个低级错误,假如不是养成了严格的习惯的话,则会是一天十个!他们的这种态度其实就是在假定他们的代码永远都不会被没有经验的程序员看到。此外,他们的说法要得以成立,等于是在说代码作者永远也不会学习或者改变观念、习惯以及方法论。最后一点,到底怎样才算是“有经验的程序员”呢?[注2]
[注2]如今这个问题似乎变得没有定论,因为你看到每个人的履历表上的自我评价全都是10分。
上面提到的这类人不喜欢引用、常量成员、访问控制、explicit、具体类(concrete classes)、封装、不变式,他们甚至在编码时根本就无视可移植性或可维护性。但他们就是喜欢重载、重写(override)、隐式转
您可能关注的文档
最近下载
- SQE工作思路与规划.pptx
- 2024年(高级)政工师理论考试题库及答案(含各题型) .docx
- 2024铁路工程投资控制系统操作手册.pdf VIP
- 临床诊断与治疗.ppt VIP
- 22 2024年香港华夏杯四年级竞赛初赛数学试卷.docx VIP
- 质量管理小组活动准则.pdf VIP
- 王杰:腾讯游戏SRE在复杂异构业务中的云原生服务实践.pdf VIP
- GB50030-2013 氧气站设计规范.docx VIP
- 2025四川九河环保集团有限责任公司下属宜宾市新绿能源有限责任公司第一批第二次员工招聘2人备考练习题库及答案解析.docx VIP
- 蒙德IMS-MF流伺服驱动器使用说明书.pdf VIP
文档评论(0)