《EffectiveC++:改善程式與設計的55個具體做法:第3版》是2011年1月出版的圖書,作者是[美]Scott Meyers(斯考特.梅耶),譯者是侯捷。
基本介紹
- 書名:EffectiveC++:改善程式與設計的55個具體做法:第3版
- 作者:[美]Scott Meyers(斯考特.梅耶)
- 譯者:侯捷
- ISBN:978-7-121-12332-0
- 定價:65.00元
- 出版社:電子工業出版社
- 出版時間:2011年1月
作者簡介,譯者簡介,目錄,
作者簡介
Scott Meyers是全世界最知名的C++軟體開發專家之一。他是暢銷書《Effective C++》系列(Effective C++,More Effective C++,Effective STL)的作者,又是創新產品《Effective C++ CD》的設計者和作者,也是Addison-Wesley的“Effective Software Development Series”顧問編輯,以及《Software Development》雜誌諮詢板成員。他也為若干新公司的技術諮詢板提供服務。Meyers於1993年自Brown大學獲得計算機博士學位。
譯者簡介
侯捷是計算機技術書籍的作家、譯者、書評人。著有《深入淺出MFC》、《多型與虛擬》、《STL源碼剖析》、《無責任書評》三卷,譯有眾多膾炙人口的高階技術書籍,包括Meyers所著的“Effective C++”系列。侯捷兼任教職於元智大學、同濟大學、南京大學。 內 容 簡 介
有人說C++程式設計師可以分為兩類,讀過Effective C++的和沒讀過的。世界頂級C++大師Scott Meyers成名之作的第三版的確當得起這樣的評價。當您讀過這本書之後,就獲得了迅速提升自己C++功力的一個契機。
在國際上,本書所引起的反響,波及整個計算機技術的出版領域,餘音至今未絕。幾乎在所有C++書籍的推薦名單上,本書都會位於前三名。作者高超的技術把握力、獨特的視角、詼諧輕鬆的寫作風格、獨具匠心的內容組織,都受到極大的推崇和仿效。這種奇特的現象,只能解釋為人們對這本書衷心的讚美和推崇。
這本書不是讀完一遍就可以束之高閣的快餐讀物,也不是用以解決手邊問題的參考手冊,而是需要您去反覆閱讀體會的,C++是真正程式設計師的語言,背後有著精深的思想與無以倫比的表達能力,這使得它具有類似宗教般的魅力。希望這本書能夠幫您跨越C++的重重險阻,領略高處才有的壯美風光,做一個成功而快樂的C++程式設計師。
目錄
譯序 vii
中英簡繁術語對照 ix
目錄 xvii
序言 xxi
致謝 xxiii
導讀 1
1. 讓自己習慣C++ 11
Accustoming Yourself to C++ 11
條款01:視C++ 為一個語言聯邦 11
View C++ as a federation of languages 11
條款02:儘量以const, enum, inline替換 #define 13
Prefer consts,enums, and inlines to #defines. 13
條款03:儘可能使用const 17
Use const whenever possible. 17
條款04:確定對象被使用前已先被初始化 26
Make sure that objects are initialized before they're used. 26
2. 構造/析構/賦值運算 34
Constructors, Destructors, and Assignment Operators 34
條款05:了解C++ 默默編寫並調用哪些函式 34
Know what functions C++ silently writes and calls. 34
條款06:若不想使用編譯器自動生成的函式,就該明確拒絕 37
Explicitly disallow the use of compiler-generated functions you do not want. 37
條款07:為多態基類聲明virtual析構函式 40
Declare destructors virtual in polymorphic base classes. 40
條款08:別讓異常逃離析構函式 44
Prevent exceptions from leaving destructors. 44
條款09:絕不在構造和析構過程中調用virtual函式 48
Never call virtual functions during construction or destruction. 48
條款10:令operator= 返回一個reference to *this 52
Have assignment operators return a reference to *this. 52
條款11:在operator= 中處理“自我賦值” 53
Handle assignment to self in operator=. 53
條款12:複製對象時勿忘其每一個成分 57
Copy all parts of an object. 57
3. 資源管理 61
Resource Management 61
條款13:以對象管理資源 61
Use objects to manage resources. 61
條款14:在資源管理類中小心copying行為 66
Think carefully about copying behavior in resource-managing classes. 66
條款15:在資源管理類中提供對原始資源的訪問 69
Provide access to raw resources in resource-managing classes. 69
條款16:成對使用new和delete時要採取相同形式 73
Use the same form in corresponding uses of new and delete. 73
條款17:以獨立語句將newed對象置入智慧型指針 75
Store newed objects in smart pointers in standalone statements. 75
4. 設計與聲明 78
Designs and Declarations 78
條款18:讓接口容易被正確使用,不易被誤用 78
Make interfaces easy to use correctly and hard to use incorrectly. 78
條款19:設計class猶如設計type 84
Treat class design as type design. 84
條款20:寧以pass-by-reference-to-const替換pass-by-value 86
Prefer pass-by-reference-to-const to pass-by-value. 86
條款21:必須返回對象時,別妄想返回其reference 90
Don't try to return a reference when you must return an object. 90
條款22:將成員變數聲明為private 94
Declare data members private. 94
條款23:寧以non-member、non-friend替換member函式 98
Prefer non-member non-friend functions to member functions. 98
條款24:若所有參數皆需類型轉換,請為此採用non-member函式 102
Declare non-member functions when type conversions should apply to all parameters. 102
條款25:考慮寫出一個不拋異常的swap函式 106
Consider support for a non-throwing swap. 106
5. 實現 113
Implementations 113
條款26:儘可能延後變數定義式的出現時間 113
Postpone variable definitions as long as possible. 113
條款27:儘量少做轉型動作 116
Minimize casting. 116
條款28:避免返回handles指向對象內部成分 123
Avoid returning "handles" to object internals. 123
條款29:為“異常安全”而努力是值得的 127
Strive for exception-safe code. 127
條款30:透徹了解inlining的里里外外 134
Understand the ins and outs of inlining. 134
條款31:將檔案間的編譯依存關係降至最低 140
Minimize compilation dependencies between files. 140
6. 繼承與面向對象設計 149
Inheritance and Object-Oriented Design 149
條款32:確定你的public繼承塑模出is-a關係 150
Make sure public inheritance models "is-a." 150
條款33:避免遮掩繼承而來的名稱 156
Avoid hiding inherited names. 156
條款34:區分接口繼承和實現繼承 161
Differentiate between inheritance of interface and inheritance of implementation. 161
條款35:考慮virtual函式以外的其他選擇 169
Consider alternatives to virtual functions. 169
條款36:絕不重新定義繼承而來的non-virtual函式 178
Never redefine an inherited non-virtual function. 178
條款37:絕不重新定義繼承而來的預設參數值 180
Never redefine a function's inherited default parameter value. 180
條款38:通過複合塑模出has-a或"根據某物實現出" 184
Model "has-a" or "is-implemented-in-terms-of" through composition. 184
條款39:明智而審慎地使用private繼承 187
Use private inheritance judiciously. 187
條款40:明智而審慎地使用多重繼承 192
Use multiple inheritance judiciously. 192
7. 模板與泛型編程 199
Templates and Generic Programming 199
條款41:了解隱式接口和編譯期多態 199
Understand implicit interfaces and compile-time polymorphism. 199
條款42:了解typename的雙重意義 203
Understand the two meanings of typename. 203
條款43:學習處理模板化基類內的名稱 207
Know how to access names in templatized base classes. 207
條款44:將與參數無關的代碼抽離templates 212
Factor parameter-independent code out of templates. 212
條款45:運用成員函式模板接受所有兼容類型 218
Use member function templates to accept "all compatible types." 218
條款46:需要類型轉換時請為模板定義非成員函式 222
Define non-member functions inside templates when type conversions are desired. 222
條款47:請使用traits classes表現類型信息 226
Use traits classes for information about types. 226
條款48:認識template元編程 233
Be aware of template metaprogramming. 233
8. 定製new和delete 239
Customizing new and delete 239
條款49:了解new-handler的行為 240
Understand the behavior of the new-handler. 240
條款50:了解new和delete的合理替換時機 247
Understand when it makes sense to replace new and delete. 247
條款51:編寫new和delete時需固守常規 252
Adhere to convention when writing new and delete. 252
條款52:寫了placement new也要寫placement delete 256
Write placement delete if you write placement new. 256
9. 雜項討論 262
Miscellany 262
條款53:不要輕忽編譯器的警告 262
Pay attention to compiler warnings. 262
條款54:讓自己熟悉包括TR1在內的標準程式庫 263
Familiarize yourself with the standard library, including TR1. 263
條款55:讓自己熟悉Boost 269
Familiarize yourself with Boost. 269
A 本書之外 273
B 新舊版條款對照 277
索引 280