譯序(侯捷)
目錄(Contents)
致謝(Acknowledgments. 中文版略)
導(dǎo)讀(Introduction) 001
基礎(chǔ)議題(Basics) 009
條款1:仔細(xì)區(qū)別 pointers 和 references 009
Distinguish between pointers and references
條款2:最好使用 C++ 轉(zhuǎn)型操作符 012
Prefer C++-style casts
條款3:絕對(duì)不要以polymorphically(多態(tài))方式來處理數(shù)組 016
Never treat arrays polymorphically
條款4:非必要不提供 default constructor 019
Avoid gratuitous default constructors
操作符(Operators) 024
條款5:對(duì)定制的型別轉(zhuǎn)換函數(shù)保持警覺 024
Be wary of user-defined conversion functions
條款6:區(qū)別 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 內(nèi)阻止資源泄漏(resource leaks) 050
Prevent resource leaks in constructors
條款11:禁止異常(exceptions)流出 destructors 之外 058
Prevent exceptions from leaving destructors
條款12:了解「擲出一個(gè) exception」與「?jìng)鬟f一個(gè)參數(shù)」
或「調(diào)用一個(gè)虛函數(shù)」之間的差異 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:明智運(yùn)用 exception specifications 072
Use exception specifications judiciously
條款15:了解異常處理(exception handling)的成本 078
Understand the costs of exception handling
效率(Efficiency) 081
條款16:謹(jǐn)記 80-20 法則 082
Remember the 80-20 rule
條款17:考慮使用 lazy evaluation 085
Consider using lazy evaluation
條款18:分期攤還預(yù)期的計(jì)算成本 093
Amortize the cost of expected computations
條款19:了解暫時(shí)對(duì)象的來源 098
Understand the origin of temporary objects
條款20:協(xié)助完成「返回值優(yōu)化(RVO)」 101
Facilitate the return value optimization
條款21:利用重載技術(shù)(overload)避免隱式型別轉(zhuǎn)換 105
Overload to avoid implicit type conversions
條款22:考慮以操作符復(fù)合型式(op=)取代其獨(dú)身型式(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
技術(shù)(Techniques, Idioms, Pattern) 123
條款25:將 constructor 和 non-member functions 虛化 123
Virtualizing constructors and non-member functions
條款26:限制某個(gè) class 所能產(chǎn)生的對(duì)象數(shù)量 130
Limiting the number of objects of a class
條款27:要求(或禁止)對(duì)象產(chǎn)生于 heap 之中 145
Requiring or prohibiting heap-based objects
條款28:Smart Pointers(智能指針) 159
條款29:Reference counting(引用計(jì)數(shù)) 183
條款30:Proxy classes(替身類、代理類) 213
條款31:讓函數(shù)根據(jù)一個(gè)以上的對(duì)象型別來決定如何虛化 228
Making functions virtual with respect to more than one object
雜項(xiàng)討論(Miscellany) 252
條款32:在未來時(shí)態(tài)下發(fā)展程序 252
Program in the future tense
條款33:將非尾端類(non-leaf classes)設(shè)計(jì)為
抽象類(abstract classes) 258
Make non-leaf classes abstract
條款34:如何在同一個(gè)程序中結(jié)合 C++ 和 C 270
Understand how to combine C++ and C in the same program
條款35:讓自己習(xí)慣于標(biāo)準(zhǔn) C++ 語言 277
Familiarize yourself with the language standard
推薦書目 285
auto_ptr 實(shí)現(xiàn)代碼 291
索引1(General Index) 295
索引2(Index of Example Classes, Functions, and Templtes) 313