譯者序
前言
緻謝
第1章 基礎問題 1
常見錯誤1:過分積極的注釋 1
常見錯誤2:幻數 4
常見錯誤3:全局變量 5
常見錯誤4:未能區分函數重載和形式參數默認值 7
常見錯誤5:對引用的認識誤區 9
常見錯誤6:對常量(性)的認識誤區 12
常見錯誤7:無視基礎語言的精妙之處 13
常見錯誤8:未能區分可訪問性和可見性 18
常見錯誤9:使用糟糕的語言 22
常見錯誤10:無視(久經考驗的)習慣用法 24
常見錯誤11:聰明反被聰明誤 27
常見錯誤12:嘴上無毛,辦事不牢 29
第2章 語法問題 31
常見錯誤13:數組定義和值初始化的語法形式混淆 31
常見錯誤14:捉摸不定的評估求值次序 32
常見錯誤15:(運算符)優先級問題 37
常見錯誤16:for語句引發的理解障礙 40
常見錯誤17:取大優先解析原則帶來的問題 43
常見錯誤18:聲明飾詞次序的小聰明 44
常見錯誤19:“函數還是對象”的多義性 46
常見錯誤20:效果漂移的類型量化飾詞 46
常見錯誤21:自反初始化 47
常見錯誤22:靜態連接類型和外部連接類型 49
常見錯誤23:運算符函數名字查找的反常行為 50
常見錯誤24:晦澀難懂的operator -> 52
第3章 預處理器問題 55
常見錯誤25:使用#define定義的字麵量 55
常見錯誤26:使用#define定義的僞函數(函數宏) 58
常見錯誤27:#if的濫用 60
常見錯誤28:斷言(assert宏)的副作用 65
第4章 類型轉換問題 69
常見錯誤29:以void *為類型轉換的中介類型 69
常見錯誤30:截切問題 72
常見錯誤31:對目標類型為指涉物為常量的指針類型的類型轉換的認識誤區 75
常見錯誤32:對以指涉物為指嚮常量的指針類型的類型為目標類型的類型轉換的認識誤區 76
常見錯誤33:對以指涉物為指嚮基類類型的指針類型的類型為目標類型的類型轉換的認識誤區 79
常見錯誤34:指嚮多維數組的指針帶來的問題 80
常見錯誤35:未經校驗的嚮下轉型 82
常見錯誤36:類型轉換運算符的誤用 83
常見錯誤37:始料未及的構造函數類型轉換 87
常見錯誤38:在多繼承條件下進行強製類型轉換 90
常見錯誤39:對非完整類型做強製類型轉換 92
常見錯誤40:舊式強製類型轉換 93
常見錯誤41:靜態強製類型轉換 95
常見錯誤42:形式參數引發臨時對象生成的初始化 97
常見錯誤43:臨時對象的生存期 101
常見錯誤44:引用和臨時對象 102
常見錯誤45:(動態強製類型轉換運算符)dynamic_cast帶來的多義性解析失敗 106
常見錯誤46:對逆變性的誤解 110
第5章 初始化問題 113
常見錯誤47:賦值與初始化混淆 113
常見錯誤48:位於非適當作用域的變量 116
常見錯誤49:未能意識到C++語言中復製操作的固守行為 119
常見錯誤50:按位復製的class對象 123
常見錯誤51:未能區分構造函數中的初始化和賦值 125
常見錯誤52:未能在成員初始化列錶中保持次序一緻性 127
常見錯誤53:對於虛基類(子對象)進行默認初始化 128
常見錯誤54:復製構造函數對基類子對象初始化的未預期行為 133
常見錯誤55:運行期靜態初始化次序 136
常見錯誤56:直接與復製初始化 138
常見錯誤57:對參數的直接初始化 141
常見錯誤58:無視返迴值優化 143
常見錯誤59:在構造函數中初始化靜態(數據)成員 146
第6章 內存和資源管理問題 149
常見錯誤60:未能區分純量與數組的內存分配機製 149
常見錯誤61:內存分配失敗校驗 152
常見錯誤62:(用自定義版本)替換全局的內存管理運算符(所調用的函數) 154
常見錯誤63:成員版本的operator new和operator delete的作用域和調用機製混淆 157
常見錯誤64:拋齣字符串字麵常量(作為異常對象) 158
常見錯誤65:未能正確理解和利用異常處理機製 161
常見錯誤66:濫用局部量地址 165
常見錯誤67:未能采用RAII(資源獲取即初始化)習慣用法 169
常見錯誤68:對auto_ptr的誤用 174
第7章 多態問題 177
常見錯誤69:類型特徵碼 177
常見錯誤70:將基類析構函數聲明為非虛函數 182
常見錯誤71:對非虛(成員)函數的遮掩 186
常見錯誤72:(以)過分靈活的(方式濫用)模闆方法設計模式 188
常見錯誤73:重載虛函數 190
常見錯誤74:為參數指定默認初始化物的虛函數 191
常見錯誤75:在構造函數和析構函數中調用虛函數 193
常見錯誤76:虛賦值 196
常見錯誤77:未能區分(函數的)重載、改寫和遮掩 198
常見錯誤78:未能深入理解虛函數和改寫的實現機製 203
常見錯誤79:支配原則議題 208
第8章 類型設計問題 211
常見錯誤80:取/設狀態接口 211
常見錯誤81:常量和引用數據成員 214
常見錯誤82:未能理解常量成員函數 217
常見錯誤83:未能區分強聚閤和弱聚閤 221
常見錯誤84:非適當的運算符重載 226
常見錯誤85:(運算符)優先級和重載 229
常見錯誤86:友元與成員運算符 230
常見錯誤87:自增/自減運算符的問題 231
常見錯誤88:對模闆化的復製操作的認識誤區 235
第9章 繼承譜係設計問題 239
常見錯誤89:持有class對象的數組 239
常見錯誤90:非適當的容器類型之可替換性 241
常見錯誤91:未能理解protected訪問層級 244
常見錯誤92:為代碼復用而以public方式繼承 247
常見錯誤93:以public方式繼承抽象類 251
常見錯誤94:未能運用繼承譜係的退化形式 252
常見錯誤95:繼承的濫用 252
常見錯誤96:依類型分派的控製結構 256
常見錯誤97:單根譜係 258
常見錯誤98:嚮class對象打探隱私 261
常見錯誤99:權能查詢問題 264
中英文術語對照錶 269
· · · · · · (
收起)