More Effective C++:35個改善編程與設計的有效方法(中文版)( 簡體 字) | |
作者:侯捷 | 類別:1. -> 程式設計 -> C++ -> C++ |
出版社:電子工業出版社 | 3dWoo書號: 28657 詢問書籍請說出此書號! 有庫存 NT售價: 445 元 |
出版日:10/1/2020 | |
頁數:336 | |
光碟數:0 | |
站長推薦: | |
印刷:黑白印刷 | 語系: ( 簡體 字 ) |
ISBN:9787121125706 | 加入購物車 │加到我的最愛 (請先登入會員) |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證, 繁體書的下載亦請直接連絡出版社) | |
譯序(侯捷) ix
導讀(Introduction) 001 基礎議題(Basics) 009 條款1:仔細區別 pointers 和 references 009 Distinguish between pointers and references. 條款2:最好使用 C++ 轉型操作符 012 Prefer C++-style casts. 條款3:絕對不要以多態(polymorphically)方式處理數組 016 Never treat arrays polymorphically. 條款4:非必要不提供 default constructor 019 Avoid gratuitous default constructors. 操作符(Operators) 024 條款5:對定制的“類型轉換函數”保持警覺 024 Be wary of user-defined conversion functions. 條款6:區別 increment/decrement 操作符的 前置(prefix)和后置(postfix)形式 031 Distinguish between prefix and postfix forms of increment and decrement operators. 條款7:千萬不要重載&&,||和, 操作符 035 Never overload &&, ||, or ,. 條款8:了解各種不同意義的 new 和 delete 038 Understand the different meanings of new and delete 異常(Exceptions) 044 條款9:利用 destructors 避免泄漏資源 045 Use destructors to prevent resource leaks. 條款10:在 constructors 內阻止資源泄漏(resource leak) 050 Prevent resource leaks in constructors. 條款11:禁止異常(exceptions)流出 destructors 之外 058 Prevent exceptions from leaving destructors. 條款12:了解“拋出一個 exception”與“傳遞一個參數” 或“調用一個虛函數”之間的差異 061 Understand how throwing an exception differs from passing a parameter or calling a virtual function. 條款13:以 by reference 方式捕捉 exceptions 068 Catch exceptions by reference. 條款14:明智運用 exception specifications 072 Use exception specifications judiciously. 條款15:了解異常處理(exception handling)的成本 078 Understand the costs of exception handling. 效率(Efficiency) 081 條款16:謹記 80-20 法則 082 Remember the 80-20 rule. 條款17:考慮使用 lazy evaluation(緩式評估) 085 Consider using lazy evaluation. 條款18:分期攤還預期的計算成本 093 Amortize the cost of expected computations. 條款19:了解臨時對象的來源 098 Understand the origin of temporary objects. 條款20:協助完成“返回值優化(RVO)” 101 Facilitate the return value optimization. 條款21:利用重載技術(overload)避免隱式類型轉換(implict type conversions)105 Overload to avoid implicit type conversions. 條款22:考慮以操作符復合形式(op=)取代其獨身形式(op) 107 Consider using op= instead of stand-alone op. 條款23:考慮使用其他程序庫 110 Consider alternative libraries. 條款24:了解 virtual functions、multiple inheritance、virtual base classes、 runtime type identification 的成本 113 Understand the costs of virtual functions, multiple inheritance, virtual base classes, and RTTI. 技術(Techniques, Idioms, Patterns) 123 條款25:將 constructor 和 non-member functions 虛化 123 Virtualizing constructors and non-member functions. 條款26:限制某個 class 所能產生的對象數量 130 Limiting the number of objects of a class. 條款27:要求(或禁止)對象產生于 heap 之中 145 Requiring or prohibiting heap-based objects. 條款28:Smart Pointers(智能指針) 159 條款29:Reference counting(引用計數) 183 條款30:Proxy classes(替身類、代理類) 213 條款31:讓函數根據一個以上的對象類型來決定如何虛化 228 Making functions virtual with respect to more than one object. 雜項討論(Miscellany) 252 條款32:在未來時態下發展程序 252 Program in the future tense. 條款33:將非尾端類(non-leaf classes)設計為 抽象類(abstract classes) 258 Make non-leaf classes abstract. 條款34:如何在同一個程序中結合 C++ 和 C 270 Understand how to combine C++ and C in the same program. 條款35:讓自己習慣于標準 C++ 語言 277 Familiarize yourself with the language standard. 推薦讀物 285 auto_ptr 實現代碼 291 索引(一)(General Index) 295 索引(二)(Index of Example Classes,Functions,and Templtes) 313 繼Effective C++之后,Scott Meyers于1996推出這本“續集”。條款變得比較少,頁數倒是多了一些,原因是這次選材比“第一集”更高階,尤其是第5章。Meyers將此章命名為技術(techniques),并明白告訴你,其中都是一些patterns,例如virtual constructors,smart pointers,reference counting,proxy classes,double dispatching……這一章的每個條款篇幅都達15~30 頁之多,實在讓人有“山重水復疑無路,柳暗花明又一村”之嘆。
雖然出版年代稍嫌久遠,但本書并沒有第2版,原因是當其出版之時(1996),C++ Standard已經幾乎定案,本書即依當時的標準草案而寫,其與現今的C++ 標準規范幾乎相同。而且可能變化的幾個彈性之處,Meyers也都有所說明與提示。讀者可以登錄作者提供的網址,看看上下兩集的勘誤與討論(數量之多,令人驚恐。幸好多是技術討論或文字斟酌,并沒有什么重大誤失)。 譯序
C++ 是一門難學易用的語言! C++ 的難學,不僅在其廣博的語法、語法背后的語義、語義背后的深層思維、深層思維背后的對象模型;C++ 的難學,還在于它提供了4種不同(相輔相成)的編程思維模型:procedural-based,object-based,object-oriented,generic paradigm。 世上沒有白吃的午餐。又要有效率,又要有彈性,又要前瞻望遠,又要回溯相容,又要能治大國,又要能烹小鮮,學習起來當然就不可能太簡單。 在如此龐大復雜的機制下,萬千使用者前赴后繼的動力是:一旦學成,妙用無窮。 C++ 相關書籍之多,車載斗量,如天上繁星,如過江之鯽。廣博如四庫全書者有之(The C++ Programming Language、C++ Primer),深奧如重山復水者有之(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),工程經驗之累積亦有之(Effective C++, More Effective C++, Exceptional C++)。 這其中,“工程經驗之累積”對已具 C++ 相當基礎的程序員而言,有著致命的吸引力與立竿見影的幫助。Scott Meyers 的Effective C++ 和 More Effective C++ 是此類佼佼,Herb Sutter 的 Exceptional C++ 則是后起之秀。 這類書籍的一個共同特色是輕薄短小,并且高密度地納入作者浸淫于 C++/OOP 領域多年而廣泛的經驗。它們不但開擴讀者的視野,也為讀者提供各種 C++/OOP 常見問題或易犯錯誤的解決模型。某些小范圍主題諸如“在base classes 中使用 virtual destructor”、“令operator= 傳回 *this 的 reference”,可能在百科型 C++ 語言書籍中亦曾概略提過,但此類書籍以深度探索的方式,讓我們了解問題背后的成因、最佳的解法,以及其他可能的牽扯。至于大范圍主題,例如smart pointers,reference counting,proxy classes,double dispatching,基本上已屬design patterns的層級! 這些都是經驗的累積和心血的結晶! 我很高興將以下兩本優秀書籍,規劃為一個系列,以鄭重的形式呈現給您: 1. Effective C++ 2/e, by Scott Meyers, AW 1998 2. More Effective C++, by Scott Meyers, AW 1996 本書不但與英文版頁頁對譯,保留索引,并加上譯注、交叉索引 、讀者服務 。 這套書將對于您的程序設計生涯帶來重大幫助。翻譯這套書籍的過程中,我感覺來自技術體會上的極大快樂。我祈盼(并相信)您在閱讀此書時擁有同樣的心情。 侯捷 2003/03/07 于臺灣新竹 jjhou@jjhou.com http://www.jjhou.com 本書保留大量簡短易讀之英文術語,時而中英并陳。以下用語請讀者特別注意: 英文術語 本書譯詞 英文術語 本書譯詞 argument 自變量 (i.e. 實參) instantiated 實例化、具現化 by reference 傳址 library 程序庫 by value 傳值 resolve 決議 dereference 解引(i.e. 解參考) parameter 參數 (i.e. 形參) evaluate 評估、核定 type 型別 (i.e. 類型) instance 實例 譯注:借此版面提醒讀者,本書之中如果出現“條款5”這樣的參考指示,指的是本書條款5;如果出現“條款E5”這樣的參考指示,E 是指 Effective C++ 2/e) |