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