C++(C++ Gotchas)程序设计陷阱 中英文版(S. C. Dewhurst著)- _阅读密码www.zasp.net_仅提供试看如需要请购买原版书
 zasp.net说明zasp.net
为了能够帮助阅读英文有困难的读者这里还提供中文翻译版,与英文原版同时提供下载。
zasp.net内容简介zasp.net
本书讨论了那些可能出现在所有C++代码中的基本错误,同样也详述了那些出现在C++语法、预处理、内存管理、多态性、类设计和类继承关系设计中可以出现的各种复杂错误。每一个错误和其所导致的错误结果将会结合错误发生的上下文仔细讲解,相应的解决办法也会详细地结合实例给出。
作者Stephen C.Dewhurst提供给读者各种C++习惯用法和设计模式,用于产生解决共性问题的定制方法。读者还将学会更多的通常被误解了的高级编程和设计中用到的C++特性。总之,本书向读者展示了如何在充满各种危险的C++世界中自由航行,以及如何学会C++专家所必备的各种实践知识。
Synesis Software公司的开发顾问Matthew Wilson这么评价这本书:“这可能是我所读过的关于C++的最好的书,我为通过这本书所学到的大量C++知识而惊奇,”
这绝对是一本值得反复阅读,仔细回味的好书。
zasp.net作者简介zasp.net
Stephen C.Dewhurst曾经是贝尔实验室中第一批C++使用者的一员,他具有将近20年的C++应用经验,曾经用C++解决了诸多领域中的问题,如编译器设计、证券安全交易、电子商务以及嵌入式通讯等领域。他还是Programming in C++的作者之一,是C/C++ User Journal杂志的编辑,C++ Report杂志的专栏作家。同时,他还是两个C++编译器的开发者,以及大量C++编程文章的作者。
zasp.net网络书评zasp.net
译注:Gotcha是I’ve got you的省略语,为“难倒你了”、“问倒你了”的意思。
C++长久演化与发展以来,这样一本gotchas书籍的迟迟出版显得有点怪怪的。C++作为一个现实可用的语言,已经有至少十五年的历史了;而C++标准在过去的五年中也几乎没有改变。就此你可能会认为,语言中的缺陷现在应该已经成为众人皆知的“常识(common knowledge)”了。然而,即使经验丰富的C++程序员也会时不时遇到麻烦;Steve Dewhurst——这位从业多年的C++课程教师、作者以及顾问——则比任何人都清楚这一点。Dewhurst看上去似乎更多的是在责备程序员的求次而安,而非C++的复杂性。在本书中,对C++基础议题的忽视及不良的风格被列为程序设计中的两大原罪。经验本身无法避免这样一些人为的失误;有时候我们确是需要一些刺耳忠言。据此,C++ Gotchas不仅仅是一本关于C++疑难杂症的目类书籍,也是现世警言,提醒我们去关注那些可能被我们忽视的问题。
惯用法便是上述问题之一。在口语中,所谓惯用法是指被经常使用的单语(比如“gotcha”),其能迅捷的表达一个明晰的含义。而惯用法的含义之所以明晰,则仅仅是因为该单语被广泛使用,而非其中的各单字的含义使然。在一门编程语言中,一个惯用法是指一个表达式或技巧,其能够明晰的表达程序员的意图。同样,编程语言中惯用法表意明晰之性质源自其被广泛使用的程度。一个没能学到口语惯用法的人会处于非常不便的境地;而一个不使用编程惯用法的程序员则会导致其他所有程序员——特别是其代码维护者——的工作更难做。在Dewhurst的书中,恰当的运用惯用法被视为良好的编程风格,而良好的编程风格可以最大程度的减少gotchas出现。
当然,如果我们所需的全部只是一次关于风格问题的霹雳讨论,这本书就会薄得多。但我们需要的是关于gotchas的特定信息,无论其最初的起因为何。Dewhurst将这些细节布列于九个章节之中:Basics(基础议题),Syntax(语法),The Preprocessor(预编译器),Conversions(转型),Initialization(初始化),Memory and Resource Management(内存与资源管理),Polymorphism(多态),Class Design(类别设计),以及Hierarchy Design(阶层体系设计)。这些gotchas的来源,从简单的粗心大意(比如错误的使用delete而非delete[]来对数组进行去配),到纯然的忽视(将一个conversion operator当成一种”cast”),直至蛮杂含混(比如在理由不充分的情况下混用虚函数的重载和覆写)。另外,郁抑而情绪化的开发过程现在也被看作是一个gotcha了;请看看书中的gotcha #12。即便你是一个编码奇才,义愤填膺的冲出办公室也不再是情有可原的“冲动”行为。
书中阐述的大部分gotchas都没什么可辩异的。而对于个别有异议的部分,是由于引出gotchas的选题本身就明显不妥吗?至少,站在后见之明的立场上,回答是肯定的。Dewhurst确实提供了具有说服力——虽然偶尔显得有些做作——的示例,使隐藏的错误浮出水面。然而,本书有少数条款并不精辟。其中之一就是const关键字在声明中首选的摆放位置的问题:
const int *thisway; // 指向constant integer的指针
int const *thatway; // 与上一句相同
Dewhurst更提倡第一种形式,因为那正是C++程序员习惯阅读的写法。其在久远的C语言年代就成为了一个惯用形式。然而,第二种声明形式也有显要的道理可言,而且其在C++社区里得到了推崇。第二种形式让我们可以总是遵循一个简单的规则:“const总是限定其左边紧挨着的那个字元。”于是,推荐其中一种作法作为一个条款或许就显得可笑而毫无意义,但也体现了Dewhurst对习惯用法至高的重视。相对于蹊跷语法而言更熟悉习惯用法的程序员(这也许包括了大多数程序员)容易将第二种形式的理解为对一个constant pointer的声明,但实际上却非如此。Dewhurst并不是语言方面的十字军战士和革命者,他只是希望负责维护其代码的人能够把事情作对。
纵而观之
本书中经常闪现“maintenance(维护)”这个字眼,其原因不难究出。现代计算领域中的一大讽事就是,硬件通常几年就更新换代一次,而许多软件却要维持数十载。软件经常比制造者所预见的寿命要长,恰有几年前的Y2K恐慌为证。Dewhurst在书中频繁的提醒读者,要考虑自己的代码如何被维护。他的建议可以被划归为两个设计指导方针:
1. 假设至少有另一个人会一直维护你的代码;
2. 不要假设这个人是群体中最聪慧的一个。
我们现在写出的古玲精怪的代码,在将来就会变成bugs。如果近年来你并没有成为诸多C++ gotchas的受害者,你也许不会感到有阅读本书的必要。但你或许想错了。C++ Gotchas就象是一种来自未来的反馈机制。它向你展示的是,你的所作所为中所有会在往后造成麻烦的东西。
是新生事物还是古已有之?
当然,这并不是第一本涉及gotchas的C++书籍。许多读者可能会立刻想到Scott Meyers的经典之作Effective C++,并转而询问在C++ Gotchas中有多少新东西。我从Scott Meyers的Effective C++以及More Effective C++的85个条款中找到15条与C++ Gtochas有重叠。数量并不多,此外,这些书籍关注的焦点相当迥异。Dewhurst更关注被我称为“subtle basics(微妙的基础部分)”的议题。从术语字面上看来,这好像是与其内容有矛盾的,然而不幸的是在C++中这并不矛盾。本书有很多可汲取的内容,但也有更多的内容本书未涵盖。例如,本书几乎不涉及C++标准程序库或templates的使用技法。这会让你琢磨着还会有多少本可能的gotchas书籍出现。如果Dewhurst只写了其中的一两本,我们就算非常幸运的了。
zasp.net目录zasp.net
Chapter 1 Basics Chapter 2 Syntax Chapter 3 The Preprocessor Chapter 4 Conversions Chapter 5 Initiazation Chapter 6 Memory and Resource Management Chapter 7 Polymorphism Chapter 8 Class Design Chapter 9 Hierarchy Design
电子书:PDF文件,31M。
www.zasp.net仅提供试看,如需要请购买原版书。请用下载工具下载,否则下载不了的。 |