|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
/ U3 `% d' M/ Q& p3 k) t) ?4 I4 h( Q' l" ]# [$ F6 X" r; ]( V
书名:《More Effective C++:35个改善编程与设计的有效方法》(中文版): L6 ]8 F# j& x0 j& Q
作者:Scott Meyers' p \1 ] t" d; s2 K
译者:侯捷 ) W" e& k5 }& Z, N
出版社:电子工业出版社" D3 K" F' ? _
出版年:2011年1月1日(第1版)
' q' }; H9 |- s5 d0 j$ e' D) s' c+ Y定价:59.00元3 h$ z4 U3 E* O
装帧:平装& o. @ W4 V+ C. `6 f
ISBN:9787121125706
u' Q( {+ {. I" }, @3 f# E7 \; X: E
购买链接:
/ U' Q9 s4 p3 Z W% l
1 B- c* W4 w( l* Z7 z
' A& P$ l) F5 |. s1 X5 Y亚马逊 -> 传送门& P" m/ C( M1 i( h
# N2 D1 J% e- D! x* L! k% \
当当网 -> 传送门
" M4 u$ o7 Y; g g& Q& k+ S6 d6 {6 K+ {
京东 -> 传送门
8 P9 z0 L1 r3 U' m( l7 K! `" n6 }4 ?- Z2 b' y ?
天猫 -> 传送门% P8 u; ]0 k' y0 i
& h- Z( A4 p1 l7 Y I6 E3 N0 w! f2 [
& c. x+ H" h1 B8 l" a1 l5 E' x- z5 M
内容简介:0 Q, C. V9 a9 @/ r6 C% _1 H
0 \3 m7 |% s C. e3 F0 P ' r9 H M3 T- ~3 O" Q) J
《More Effective C++:35个改善编程与设计的有效方法》是梅耶尔大师 Effective 三部曲之一。继 Effective C++ 之后,Scott Meyers 于 1996 推出这本《More Effective C++(35个改善编程与设计的有效方法)》“续集”。条款变得比较少,页数倒是多了一些,原因是这次选材比“一集”更高阶,尤其是第 5 章。Meyers 将此章命名为技术(techniques),并明白告诉你,其中都是一些 patterns,例如 virtual constructors,smart pointers,reference counting,proxy classes,double dispatching……这一章的每个条款篇幅都达 15-30 页之多,实在让人有“山重水复疑无路,柳暗花明又一村”之叹。3 ?! Y# O* p) H. W; Z3 }
! [4 {/ {2 b0 Q5 V7 \
虽然出版年代稍嫌久远,但《More Effective C++》并没有第 2 版,原因是当其出版之时(1996),C++ Standard 已经几乎定案,《More Effective C++:35个改善编程与设计的有效方法》即依当时的标准草案而写,其与现今的 C++ 标准规范几乎相同。而且可能变化的几个弹性之处, Meyers 也都有所说明与提示。读者可以登录作者提供的网址,看看上下两集的勘误与讨论(数量之多,令人惊恐。幸好多是技术讨论或文字斟酌,并没有什么重大误失)。5 N" @/ r4 f3 J
9 V# d3 @2 |2 d3 j9 k, C U
3 Y* Y5 W5 b" ]6 @) |目录:+ s6 ]( y `+ z$ G. @( y+ l
) T( W6 f& F' [3 Z+ q
6 ~! |$ P. D( H' ] B
译序(侯捷) ix( a4 H2 x: f% t4 X1 Z7 ~
导读(Introduction) 001. m$ q h+ U! a/ |4 F! t7 E" q
基础议题(Basics) 009. d P2 @3 M' C: b
条款1:仔细区别 pointers 和 references 009
, }$ D& `/ K) x7 e- `$ c. rDistinguish between pointers and references.
% C& {# k2 [" Y1 q2 B: K条款2:最好使用 C++ 转型操作符 012
) X; v1 H2 x4 E4 E- C. e o* v3 TPrefer C++-style casts.$ N3 s4 W2 O. f
条款3:绝对不要以多态(polymorphically)方式处理数组 016- U% K4 h3 ^# m
Never treat arrays polymorphically.
! h& @5 L1 W& H- c1 a( v" }条款4:非必要不提供 default constructor 019
6 _& Y& I4 W, D A1 GAvoid gratuitous default constructors.4 Z* x3 J! e& ~0 Y/ m9 t) }$ X
! }% K8 w( f" G
操作符(Operators) 024
) `8 ~9 @: ]8 m8 l' z0 T" w9 x. {条款5:对定制的“类型转换函数”保持警觉 0249 R d) \9 ?3 e D5 q# O# _0 C
Be wary of user-defined conversion functions.4 T8 J g' X3 Q) Y4 `
条款6:区别 increment/decrement 操作符的
& E/ r: A+ p1 p3 a' \前置(prefix)和后置(postfix)形式 031
; h$ h/ o# A; K% wDistinguish between prefix and postfix forms of increment and decrement operators.: o, b, O( w% f2 H( ]) ^0 U
条款7:千万不要重载&&,||和, 操作符 035! a. |3 H" t+ r6 I% ]6 t' n
Never overload &&, ||, or ,.. Y! f1 Y- {( k( |; [; e" _0 {% A
条款8:了解各种不同意义的 new 和 delete 0384 ]; x: n$ Z- \. h& J. U
Understand the different meanings of new and delete
6 m8 T% r/ e2 Z" @8 J9 o1 ~8 u; K' \2 _" `: w; M
异常(Exceptions) 0448 Z; P" A% W8 a; h, C2 Y. b
条款9:利用 destructors 避免泄漏资源 045$ n4 g9 F" o- w" N1 S1 d6 r5 x
Use destructors to prevent resource leaks.
- B( g' n$ s- a( V+ _! Z0 U条款10:在 constructors 内阻止资源泄漏(resource leak) 050" t- W; W g7 \- @
Prevent resource leaks in constructors.
x9 _* u: e O7 L+ I7 h8 W& f条款11:禁止异常(exceptions)流出 destructors 之外 0580 n: V5 X/ e; H
Prevent exceptions from leaving destructors.
, }$ N; E6 ~$ |5 a4 Z- S4 v) e条款12:了解“抛出一个 exception”与“传递一个参数”
7 ~; L: V) i/ l. ~( v或“调用一个虚函数”之间的差异 061' S' O; i2 c! U: L& N& c/ ?
Understand how throwing an exception differs from passing a parameter or calling a virtual function. n# K: y/ ]- b' S2 ` F+ b
条款13:以 by reference 方式捕捉 exceptions 068" b+ Z( p& {% o2 a8 Z% L7 _
Catch exceptions by reference.
+ e: { ]$ O: @条款14:明智运用 exception specifications 0727 r2 l: Y* g3 Q" X. y
Use exception specifications judiciously.
4 p0 L- N# y$ c, R4 q) G条款15:了解异常处理(exception handling)的成本 078
4 T; z& J& e. VUnderstand the costs of exception handling.
8 a, ~ v8 H: V: _8 {* M# a/ _* B! ?& b/ W3 _
效率(Efficiency) 081
; B. r8 c" N- g Y, ]/ e条款16:谨记 80-20 法则 082
- m% D" ?4 m+ [2 zRemember the 80-20 rule.
, l2 `4 n! i8 e( ]条款17:考虑使用 lazy evaluation(缓式评估) 085
8 O* y. p: ]# v% l/ W4 Y7 F, lConsider using lazy evaluation.' |3 p7 \+ I4 }
条款18:分期摊还预期的计算成本 0931 e3 u9 t+ P+ o5 W: ?8 Z
Amortize the cost of expected computations.9 N7 A# x* e9 r% R1 c
条款19:了解临时对象的来源 0987 ~" k9 P( k; k5 E4 u
Understand the origin of temporary objects.
8 v5 c( {9 g) G S* u: d* p条款20:协助完成“返回值优化(RVO)” 101
+ d0 T6 S" U9 m; x* Q* \- e& mFacilitate the return value optimization.
5 g) H/ ^4 y8 F- v( G% U |条款21:利用重载技术(overload)避免隐式类型转换(implict type conversions)105* S' A$ T" y# `4 s) b
Overload to avoid implicit type conversions.
6 S" ?9 L! E3 F Q( ]8 C条款22:考虑以操作符复合形式(op=)取代其独身形式(op) 1074 |" m7 n4 C6 M/ l, `4 A( t* h! o
Consider using op= instead of stand-alone op.' @- I# n4 B; Y: d+ H
条款23:考虑使用其他程序库 110. K" \* \7 a# W7 \1 i6 u
Consider alternative libraries.
3 w3 q2 U4 m. R8 I条款24:了解 virtual functions、multiple inheritance、virtual base classes、0 x/ a7 r+ b' e3 b. L8 @1 V3 P" N. B
runtime type identification 的成本 113
3 w8 m5 ~0 x1 g" o2 iUnderstand the costs of virtual functions, multiple inheritance, virtual base classes, and RTTI.) t( j% Z) ~7 O0 e! Z7 p
8 W$ O# Z7 {! L3 ?* s! u
技术(Techniques, Idioms, Patterns) 123- k! |5 y, K! c5 ~
条款25:将 constructor 和 non-member functions 虚化 123
% g" p( d4 s( h4 t7 T9 AVirtualizing constructors and non-member functions.
4 i1 Q# D7 l2 y! |+ r条款26:限制某个 class 所能产生的对象数量 130
0 n+ B- F) `- Q4 G1 U8 n, }5 ?+ cLimiting the number of objects of a class.5 u2 T) {! @) x: m% G; G
条款27:要求(或禁止)对象产生于 heap 之中 1450 X- v- D( T( s. V1 O
Requiring or prohibiting heap-based objects.* S4 `) J1 v+ d
条款28:Smart Pointers(智能指针) 159, ^9 J/ |' i- I4 Q* @% w O
条款29:Reference counting(引用计数) 183
, I* }8 i2 q& j5 @4 m# ?/ U条款30:Proxy classes(替身类、代理类) 213
# B8 ?1 f! \, X3 x% _- o# o条款31:让函数根据一个以上的对象类型来决定如何虚化 228
1 @& S) Z8 J5 W$ c1 U7 R$ EMaking functions virtual with respect to more than one object.
8 H' d, b5 ]# t* k) A7 U4 b P& }& n
杂项讨论(Miscellany) 252
$ f( m e3 V. a8 z, b; {5 }- O条款32:在未来时态下发展程序 252
: c+ M) t* {, D5 K# D; w; MProgram in the future tense.! Q& i, N3 }2 j& B4 m0 j
条款33:将非尾端类(non-leaf classes)设计为
0 e, m7 P) _6 |4 H. G抽象类(abstract classes) 258
0 U% N% k3 X$ |) CMake non-leaf classes abstract.
' W. o5 X# F2 Q! y( {: d条款34:如何在同一个程序中结合 C++ 和 C 270+ n/ }/ v& w/ z, h" R4 d5 j) q
Understand how to combine C++ and C in the same program.0 f- W+ v2 R( `9 C( d; Q
条款35:让自己习惯于标准 C++ 语言 277$ Y1 D, Q9 Z4 s' C# I A+ D
Familiarize yourself with the language standard.9 @- k% V7 V- F' q4 h/ `! [; F" W4 W
推荐读物 285; ^$ g) k4 j6 e* p) q
auto_ptr 实现代码 291
3 Z K! R/ |- z0 i2 h! Y索引(一)(General Index) 295
/ @/ O& g- q0 f+ w+ R( I0 w索引(二)(Index of Example Classes,Functions,and Templtes) 313
4 M+ W! w- _6 R- b' W, B0 {# R, L- w& ]
/ U2 L+ Q, Z g8 J' ~5 A
! x' q# ?6 C7 K! n |
|