More Effective C++:35個(gè)改善編程與設(shè)計(jì)的有效方法(中文版)
定 價(jià):59 元
叢書(shū)名:傳世經(jīng)典書(shū)叢
- 作者:(美),梅耶 ,(Meyers,S.) 著 侯捷 譯
- 出版時(shí)間:2011/1/1
- ISBN:9787121125706
- 出 版 社:電子工業(yè)出版社
- 中圖法分類(lèi):TP312C
- 頁(yè)碼:317
- 紙張:膠版紙
- 版次:1
- 開(kāi)本:16開(kāi)
繼Effective C++之后,Scott Meyers于1996推出這本“續(xù)集”。條款變得比較少,頁(yè)數(shù)倒是多了一些,原因是這次選材比“第一集”更高階,尤其是第5章。Meyers將此章命名為技術(shù)(techniques),并明白告訴你,其中都是一些patterns,例如virtual constructors,smart pointers,reference counting,proxy classes,double dispatching……這一章的每個(gè)條款篇幅都達(dá)15~30 頁(yè)之多,實(shí)在讓人有“山重水復(fù)疑無(wú)路,柳暗花明又一村”之嘆。
雖然出版年代稍嫌久遠(yuǎn),但本書(shū)并沒(méi)有第2版,原因是當(dāng)其出版之時(shí)(1996),C++ Standard已經(jīng)幾乎定案,《More Effective C++:35個(gè)改善編程與設(shè)計(jì)的有效方法(中文版)》即依當(dāng)時(shí)的標(biāo)準(zhǔn)草案而寫(xiě),其與現(xiàn)今的C++ 標(biāo)準(zhǔn)規(guī)范幾乎相同。而且可能變化的幾個(gè)彈性之處,Meyers也都有所說(shuō)明與提示。讀者可以登錄作者提供的網(wǎng)址,看看上下兩集的勘誤與討論(數(shù)量之多,令人驚恐。幸好多是技術(shù)討論或文字斟酌,并沒(méi)有什么重大誤失)。
讀者對(duì)象:程序設(shè)計(jì)學(xué)習(xí)者和在職開(kāi)發(fā)人員。
C++ 是一門(mén)難學(xué)易用的語(yǔ)言!
C++ 的難學(xué),不僅在其廣博的語(yǔ)法、語(yǔ)法背后的語(yǔ)義、語(yǔ)義背后的深層思維、深層思維背后的對(duì)象模型;C++ 的難學(xué),還在于它提供了4種不同(相輔相成)的編程思維模型:procedural-based,object-based,object-oriented,generic paradigm。
世上沒(méi)有白吃的午餐。又要有效率,又要有彈性,又要前瞻望遠(yuǎn),又要回溯相容,又要能治大國(guó),又要能烹小鮮,學(xué)習(xí)起來(lái)當(dāng)然就不可能太簡(jiǎn)單。
在如此龐大復(fù)雜的機(jī)制下,萬(wàn)千使用者前赴后繼的動(dòng)力是:一旦學(xué)成,妙用無(wú)窮。
C++ 相關(guān)書(shū)籍之多,車(chē)載斗量,如天上繁星,如過(guò)江之鯽。廣博如四庫(kù)全書(shū)者有之(The C++ Programming Language、C++ Primer),深?yuàn)W如重山復(fù)水者有之(The Annotated C++ Reference Manual, Inside the C++ Object Model),細(xì)說(shuō)歷史者有之(The Design and Evolution of C++, Ruminations on C++),獨(dú)沽一味者有之(Polymorphism in C++, Genericity in C++),獨(dú)樹(shù)一幟者有之(Design Patterns, Large Scale C++ Software Design, C++ FAQs),程序庫(kù)大全有之(The C++ Standard Library),另辟蹊徑者有之(Generic Programming and the STL),工程經(jīng)驗(yàn)之累積亦有之(Effective C++, More Effective C++, Exceptional C++)。
這其中,“工程經(jīng)驗(yàn)之累積”對(duì)已具 C++ 相當(dāng)基礎(chǔ)的程序員而言,有著致命的吸引力與立竿見(jiàn)影的幫助。Scott Meyers 的Effective C++ 和 More Effective C++ 是此類(lèi)佼佼,Herb Sutter 的 Exceptional C++ 則是后起之秀。
這類(lèi)書(shū)籍的一個(gè)共同特色是輕薄短小,并且高密度地納入作者浸淫于 C++/OOP 領(lǐng)域多年而廣泛的經(jīng)驗(yàn)。它們不但開(kāi)擴(kuò)讀者的視野,也為讀者提供各種 C++/OOP 常見(jiàn)問(wèn)題或易犯錯(cuò)誤的解決模型。某些小范圍主題諸如“在base classes 中使用 virtual destructor”、“令operator= 傳回 *this 的 reference”,可能在百科型 C++ 語(yǔ)言書(shū)籍中亦曾概略提過(guò),但此類(lèi)書(shū)籍以深度探索的方式,讓我們了解問(wèn)題背后的成因、最佳的解法,以及其他可能的牽扯。至于大范圍主題,例如smart pointers,reference counting,proxy classes,double dispatching,基本上已屬design patterns的層級(jí)!
這些都是經(jīng)驗(yàn)的累積和心血的結(jié)晶!
我很高興將以下兩本優(yōu)秀書(shū)籍,規(guī)劃為一個(gè)系列,以鄭重的形式呈現(xiàn)給您:
1.Effective C++ 2/e, by Scott Meyers, AW 1998
2.More Effective C++, by Scott Meyers, AW 1996
本書(shū)不但與英文版頁(yè)頁(yè)對(duì)譯,保留索引,并加上譯注、交叉索引 、讀者服務(wù) 。
這套書(shū)將對(duì)于您的程序設(shè)計(jì)生涯帶來(lái)重大幫助。翻譯這套書(shū)籍的過(guò)程中,我感覺(jué)來(lái)自技術(shù)體會(huì)上的極大快樂(lè)。我祈盼(并相信)您在閱讀此書(shū)時(shí)擁有同樣的心情。
譯序(侯捷)
導(dǎo)讀(Introduction)
基礎(chǔ)議題(Basics)
條款1:仔細(xì)區(qū)別 pointers 和 references
Distinguish between pointers and references.
條款2:最好使用 C++ 轉(zhuǎn)型操作符
Prefer C++-style casts.
條款3:絕對(duì)不要以多態(tài)(polymorphically)方式處理數(shù)組
Never treat arrays polymorphically.
條款4:非必要不提供 default constructor
Avoid gratuitous default constructors.
操作符(Operators)
條款5:對(duì)定制的"類(lèi)型轉(zhuǎn)換函數(shù)"保持警覺(jué)
Be wary of user-defined conversion functions.
條款6:區(qū)別 increment/decrement 操作符的前置(prefix)和后置(postfix)形式
Distinguish between prefix and postfix forms of increment and decrement operators.
條款7:千萬(wàn)不要重載&&,||和, 操作符
Never overload &&, ||, or,.
條款8:了解各種不同意義的 new 和 delete
Understand the different meanings of new and delete
異常(Exceptions)
條款9:利用 destructors 避免泄漏資源
Use destructors to prevent resource leaks.
條款10:在 constructors 內(nèi)阻止資源泄漏(resource leak)
Prevent resource leaks in constructors.
條款11:禁止異常(exceptions)流出 destructors 之外
Prevent exceptions from leaving destructors.
條款12:了解"拋出一個(gè) exception"與"傳遞一個(gè)參數(shù)"或"調(diào)用一個(gè)虛函數(shù)"之間的差異
Understand how throwing an exception differs from passing a parameter or calling a virtual function.
條款13:以 by reference 方式捕捉 exceptions
Catch exceptions by reference.
條款14:明智運(yùn)用 exception specifications
Use exception specifications judiciously.
條款15:了解異常處理(exception handling)的成本
Understand the costs of exception handling.
效率(Efficiency)
條款16:謹(jǐn)記 80-20 法則
Remember the 80-20 rule.
條款17:考慮使用 lazy evaluation(緩式評(píng)估)
Consider using lazy evaluation.
條款18:分期攤還預(yù)期的計(jì)算成本
Amortize the cost of expected computations.
條款19:了解臨時(shí)對(duì)象的來(lái)源
Understand the origin of temporary objects.
條款20:協(xié)助完成"返回值優(yōu)化(RVO)"
Facilitate the return value optimization.
條款21:利用重載技術(shù)(overload)避免隱式類(lèi)型轉(zhuǎn)換(implict type conversions)
Overload to avoid implicit type conversions.
條款22:考慮以操作符復(fù)合形式(op=)取代其獨(dú)身形式(op)
Consider using op= instead of stand-alone op.
條款23:考慮使用其他程序庫(kù)
Consider alternative libraries.
條款24:了解 virtual functions、multiple inheritance、virtual base classes、runtime type identification 的成本
Understand the costs of virtual functions, multiple inheritance,virtual base classes, and RTTI.
技術(shù)(Techniques, Idioms, Patterns)
條款25:將 constructor 和 non-member functions 虛化
Virtualizing constructors and non-member functions.
條款26:限制某個(gè) class 所能產(chǎn)生的對(duì)象數(shù)量
Limiting the number of objects of a class.
條款27:要求(或禁止)對(duì)象產(chǎn)生于 heap 之中
Requiring or prohibiting heap-based objects.
條款28:Smart Pointers(智能指針)
條款29:Reference counting(引用計(jì)數(shù))
條款30:Proxy classes(替身類(lèi)、代理類(lèi))
條款31:讓函數(shù)根據(jù)一個(gè)以上的對(duì)象類(lèi)型來(lái)決定如何虛化
Making functions virtual with respect to more than one object.
雜項(xiàng)討論(Miscellany)
條款32:在未來(lái)時(shí)態(tài)下發(fā)展程序
Program in the future tense.
條款33:將非尾端類(lèi)(non-leaf classes)設(shè)計(jì)為抽象類(lèi)(abstract classes)
Make non-leaf classes abstract.
條款34:如何在同一個(gè)程序中結(jié)合 C++ 和 C
Understand how to combine C++ and C in the same program.
條款35:讓自己習(xí)慣于標(biāo)準(zhǔn) C++ 語(yǔ)言
Familiarize yourself with the language standard.
推薦讀物
auto_ptr 實(shí)現(xiàn)代碼
索引(一)(General Index)
索引(二)(Index of Example Classes,F(xiàn)unctions,and Templtes)