前 言
第一部分 語法篇
第1章 從C繼承而來的/2
建議0:不要讓main函數返迴void/2
建議1:區分0的4種麵孔/5
建議2:避免那些由運算符引發的混亂/8
建議3:對錶達式計算順序不要想當然/9
建議4:小心宏#define使用中的陷阱/12
建議5:不要忘記指針變量的初始化/14
建議6:明晰逗號分隔錶達式的奇怪之處/15
建議7:時刻提防內存溢齣/16
建議8:拒絕晦澀難懂的函數指針/19
建議9:防止重復包含頭文件/19
建議10:優化結構體中元素的布局/21
建議11:將強製轉型減到最少/23
建議12:優先使用前綴操作符/26
建議13:掌握變量定義的位置與時機/28
建議14:小心typedef使用中的陷阱/30
建議15:盡量不要使用可變參數/32
建議16:慎用goto/36
建議17:提防隱式轉換帶來的麻煩/38
建議18:正確區分void與void*/42
第2章 從C到C++,需要做齣一些改變/45
建議19:明白在C++中如何使用C /45
建議20:使用memcpy()係列函數時要足夠小心/48
建議21:盡量用new/delete代替malloc/free/49
建議22:靈活地使用不同風格的注釋/52
建議23:盡量使用C++標準的iostream/55
建議24:盡量采用C++風格的強製轉型/58
建議25:盡量用const、enum、inline替換#define/59
建議26:用引用代替指針/62
第3章 說一說“內存管理”的那點事兒/66
建議27:區分內存分配的方式/67
建議28:new/delete與new[]/delete[]必須配對使用/69
建議29:區分new的三種形態/71
建議30:new內存失敗後的正確處理/75
建議31:瞭解new_handler的所作所為/78
建議32:藉助工具監測內存泄漏問題/81
建議33:小心翼翼地重載operator new/ operator delete /84
建議34:用智能指針管理通過new創建的對象/88
建議35:使用內存池技術提高內存申請效率與性能/91
第4章 重中之重的類/95
建議36:明晰class與struct之間的區彆/95
建議37:瞭解C++悄悄做的那些事/99
建議38:首選初始化列錶實現類成員的初始化/101
建議39:明智地拒絕對象的復製操作/105
建議40:小心,自定義拷貝函數/107
建議41:謹防因構造函數拋齣異常而引發的問題/110
建議42:多態基類的析構函數應該為虛/113
建議43:絕不讓構造函數為虛/116
建議44:避免在構造/析構函數中調用虛函數/117
建議45:默認參數在構造函數中給你帶來的喜與悲/120
建議46:區分Overloading、Overriding及Hiding之間的差異/122
建議47:重載operator=的標準三步走/126
建議48:運算符重載,是成員函數還是友元函數/131
建議49:有些運算符應該成對實現/134
建議50:特殊的自增自減運算符重載/136
建議51:不要重載operator&&、operator||以及operator,/137
建議52:閤理地使用inline函數來提高效率/139
建議53:慎用私有繼承/141
建議54:抵製MI的糖衣炮彈/144
建議55:提防對象切片/147
建議56:在正確的場閤使用恰當的特性/150
建議57:將數據成員聲明為private/154
建議58:明晰對象構造與析構的順序/156
建議59:明瞭如何在主調函數啓動前調用函數/158
第5章 用好模闆,嚮著GP開進/161
建議60:審慎地在動、靜多態之間選擇/161
建議61:將模闆的聲明和定義放置在同一個頭文件裏/164
建議62:用模闆替代參數化的宏函數/168
建議63:區分函數模闆與模闆函數、類模闆與模闆類/169
建議64:區分繼承與模闆/171
第6章 讓神秘的異常處理不再神秘/176
建議65:使用exception來處理錯誤/176
建議66:傳值throw異常,傳引用catch異常/179
建議67:用“throw;”來重新拋齣異常/183
建議68:瞭解異常捕獲與函數參數傳遞之間的差異/185
建議69:熟悉異常處理的代價/189
建議70:盡量保證異常安全/192
第7章 用好STL這個大輪子/198
建議71:盡量熟悉C++標準庫/198
建議72:熟悉STL中的有關術語/201
建議73:刪除指針的容器時避免資源泄漏/204
建議74:選擇閤適的STL容器/206
建議75:不要在STL容器中存儲auto_ptr對象/209
建議76:熟悉刪除STL容器中元素的慣用法/210
建議77:小心迭代器的失效/213
建議78:盡量使用vector和string代替動態分配數組/214
建議79:掌握vector和string與C語言API的通信方式/216
建議80:多用算法調用,少用手寫循環/217
第二部分 編碼習慣和規範篇
第8章 讓程序正確執行/222
建議81:避免無意中的內部數據裸露/222
建議82:積極使用const為函數保駕護航/224
建議83:不要返迴局部變量的引用/228
建議84:切忌過度使用傳引用代替傳對象/230
建議85:瞭解指針參數傳遞內存中的玄機/231
建議86:不要將函數參數作為工作變量 /233
建議87:躲過0值比較的層層陷阱/234
建議88:不要用reinterpret_cast去迷惑編譯器/236
建議89:避免對動態對象指針使用static_cast/237
建議90:盡量少應用多態性數組/238
建議91:不要強製去除變量的const屬性/240
第9章 提高代碼的可讀性/242
建議92:盡量使代碼版麵整潔優雅/243
建議93:給函數和變量起一個“能說話”的名字/246
建議94:閤理地添加注釋/248
建議95:為源代碼設置一定的目錄結構/251
建議96:用有意義的標識代替Magic Numbers/252
建議97:避免使用“聰明的技巧”/253
建議98:運算符重載時堅持其通用的含義/254
建議99:避免嵌套過深與函數過長/255
建議100:養成好習慣,從現在做起/256
第10章 讓代碼運行得再快些/258
建議101:用移位實現乘除法運算/258
建議102:優化循環,提高效率/259
建議103:改造switch語句/260
建議104:精簡函數參數 /261
建議105:謹慎使用內嵌匯編/262
建議106:努力減少內存碎片/263
建議107:正確地使用內聯函數/263
建議108:用初始化取代賦值/264
建議109:盡可能地減少臨時對象/266
建議110:最後再去優化代碼/267
第11章 零碎但重要的其他建議/269
建議111:采用相對路徑包含頭文件/269
建議112:讓條件編譯為開發齣力/270
建議113:使用.inl文件讓代碼整潔可讀/272
建議114:使用斷言來發現軟件問題/274
建議115:優先選擇編譯和鏈接錯誤/275
建議116:不放過任何一條編譯器警告/277
建議117:盡量減少文件之間的編譯依賴 /278
建議118:不要在頭文件中使用using/280
建議119:劃分全局名空間避免名汙染/282
第三部分 程序架構和思想篇
第12章 麵嚮對象的類設計/286
建議120:堅持“以行為為中心”的類設計/286
建議121:用心做好類設計/287
建議122:以指針代替嵌入對象或引用/289
建議123:努力將接口最小化且功能完善/291
建議124:讓類的數據隱藏起來/292
建議125:不要讓成員函數破壞類的封裝性/294
建議126:理解“virtual + 訪問限定符”的深層含義/295
建議127:謹慎恰當地使用友元機製/297
建議128:控製對象的創建方式/299
建議129:控製實例化對象的個數/301
建議130:區分繼承與組閤/303
建議131:不要將對象的繼承關係擴展至對象容器/307
建議132:杜絕不良繼承/308
建議133:將RAII作為一種習慣/310
建議134:學習使用設計模式/311
建議135:在接口繼承和實現繼承中做謹慎選擇/314
建議136:遵循類設計的五項基本原則/315
第13章 返璞歸真的程序設計/318
建議137:用錶驅動取代冗長的邏輯選擇/318
建議138:為應用設定特性集/324
建議139:編碼之前需三思/324
建議140:重構代碼/326
建議141:透過錶麵的語法挖掘背後的語義/328
建議142:在未來時態下開發C++程序/330
建議143:根據你的目的決定造不造輪子/331
建議144:謹慎在OO與GP之間選擇/331
建議145:讓內存管理理念與時俱進/332
建議146:從大師的代碼中學習編程思想與技藝/334
建議147:遵循自然而然的C++風格/335
建議148:瞭解C++語言的設計目標與原則/335
建議149:明確選擇C++的理由/338
· · · · · · (
收起)