本帖最后由 数学中国—罂粟 于 2014-7-25 10:31 编辑 8 U* i* y: w5 i y
- j0 x0 D2 m( C, ^0 v; c内容简介 ( c9 X+ P' A3 x# Z7 z1 `《深入理解C++11:C++11新特性解析与应用》内容简介:国内首本全面深入解读C++11新标准的专著,由C++标准委员会代表和IBM XL编译器中国开发团队共同撰写。不仅详细阐述了C++11标准的设计原则,而且系统地讲解了C++11新标准中的所有新语言特性、新标准库特性、对原有特性的改进,以及如何应用所有这些新特性。# ?, I1 x; Y/ p5 d. S0 u
《深入理解C++11:C++11新特性解析与应用》一共8章:第1章从设计思维和应用范畴两个维度对C++11新标准中的所有特性进行了分类,呈现了C++11新特性的原貌;第2章讲解了在保证与C语言和旧版C++标准充分兼容的原则下增加的一些新特性;第3章讲解了具有广泛可用性、能与其他已有的或者新增的特性结合起来使用的、具有普适性的一些新特性;第4章讲解了C++11新标准对原有一些语言特性的改进,这些特性不仅能让C++变得更强大,还能提升程序员编写代码的效率;第5章讲解了C++11在安全方面所做的改进,主要涵盖枚举类型安全和指针安全两个方面的内容;第6章讲解了为了进一步提升和挖掘C++程序性能和让C++能更好地适应各种新硬件的发展而设计的新特性,如多核、多线程、并行编程方面的新特性;第7章讲解了一些颠覆C++一贯设计思想的新特性,如lambda表达式等;第8章讲解了C++11为了解决C++编程中各种典型实际问题而做出的有效改进,如对Unicode的深入支持等。附录中则介绍了C++11标准与其他相关标准的兼容性和区别、C++11中弃用的特性、编译器对C++11的支持情况,以及学习C++11的相关资源。% ~5 A V7 _9 n
2 Y0 E T( D# T A3 L: b编辑推荐 ! R' l3 v' y& n% U1 h- l$ t1 G《深入理解C++11:C++11新特性解析与应用》编辑推荐:C++标准委员会成员和IBM XL编译器中国开发团队共同撰写,权威性毋庸置疑。系统、深入、详尽地讲解了C++11新标准中的新语言特性、新标准库特性、对原有特性的改进,以及所有这些新特性的应用。4 M! t5 }1 g9 `# z3 ?1 I
% i2 P! C) O6 K作者简介8 d( k9 k+ `% x- P7 y
作者:(加拿大)Michael Wong IBM XL编译器中国开发团队" v1 r1 O6 \ a1 K. s2 U: b$ P9 I
# q0 h; J" X2 ]( W" O) I+ rMichael Wong,C++11标准委员会(WG21)委员,WG21加拿大代表团团长及IBM公司代表(投票人),WG21 SG5(transactional Memory study group)学习小组组长。除此之外,Michael还是OpenMP委员会的CEO,SCC(Standards Council of Canada)的副主席。% O% r. l" n0 v
Michael是多个C++11/OpenMP/STM新特性的合作编写者,活跃于各种技术会议,而且为Programming Committee of Boost以及IWOMP等国际会议服务。Michael也是IBM公司的高级技术专家,领导IBM XL C++编译器、XL C编译器的开发工作,当前致力于IBM编译器的C++11新特性部署。Michael在并行编程、C++基准测试、对象模型、泛型编程、模板元编程等多个技术领域均有涉猎,并且在对象模型以及事务内存等方面取得过多个专利。: y# V* b/ O, ` \
早年Michael于多伦多大学获取得了天体物理学的学士学位,并在滑铁卢大学获得了硕士学位。在加入IBM之前,Michael曾先后供职于大卫?邓禄普天文台(David Dunlap Observatory),CDC公司(Control Data Corporation),BMO Nesbitt Burns公司等。- A) L! @" ^/ r6 ^" x, O
IBM XL编译器中国开发团队,IBM拥有悠久的编译器开发历史(始于上世纪80年代),在全球有将近400名高素质工程师组成的研发团队,其中包括许多世界知名的研究学者和技术专家。IBM一直以来都是编程语言的制定者和倡导者之一,并将长期在编译领域进行研发和投资。IBM编译器中国开发团队于2010年在上海成立,现拥有编译器前端开发人员(C/C++)、后端开发人员、测试人员,以及性能分析人员共16人。团队与IBM北美编译器团队紧密合作,共同开发、测试和发布基于POWER系统的AIX及Linux平台下的XL C/C++和XL Fortran系列产品,并对其提供技术支持。虽然团队成立时间不长,但已于2012年成功发布最新版本的XL C/C++ for Linux V12.1 & XL Fortran for Linux V14.1,并获得7项发明专利。团队成员拥有较丰富的编译器开发经验,对编译技术、编程语言、性能优化和并行计算等各领域都有一定的研究,也对C++11标准的各种新特性有较早的研究和理解,并正在实际地参与C++11新特性的开发工作。& t! C* x' x; G; X L
- E8 O- Z3 d: L目录免责声明- o! F# U. k1 E3 q
序 j8 m6 J/ L$ k4 q: [
前言% F; j6 ~- a5 Q. ~" Q1 C' r
第1章新标准的诞生1 , q' D# }0 A7 u- r8 Y1.1曙光:C++11标准的诞生1 1 f+ S* W. ]2 F1 a) G1 ]! x1.1.1C++11/C++0x(以及C11/C1x)——新标准诞生1 4 m7 J' D; e& }' J( k; X: y1.1.2什么是C++11/C++0x2/ l1 |9 j. _7 l
1.1.3新C++语言的设计目标3& R/ V7 m/ N4 ^ f
1.2今时今日的C++5 ) ~$ d, ^0 y2 T1 ?1.2.1C++的江湖地位58 J; l1 x+ N) a5 y: c+ _
1.2.2C++11语言变化的领域5 + s& D: _! r& h0 F. ` v+ i+ X( B1.3C++11特性的分类7 V) N! r4 U8 E4 h1 Z, E6 U8 ]: V1.4C++特性一览11 9 W/ G; Z+ B! V1 Y) v1.4.1稳定性与兼容性之间的抉择11% m" Q2 b' D' s) z9 B6 q& R; ?+ I
1.4.2更倾向于使用库而不是扩展语言来实现特性12 8 @8 t( o3 B6 D. D/ ?0 J4 E1.4.3更倾向于通用的而不是特殊的手段来实现特性13( e! g0 q8 ] F/ w. Z5 z
1.4.4专家新手一概支持13' S* H! W9 |* h t9 s# I! ?
1.4.5增强类型的安全性14 * p& O4 t, M4 m1 _5 z; {8 f2 j& i1.4.6与硬件紧密合作14 ! T3 e" x6 K- R% D2 J1.4.7开发能够改变人们思维方式的特性15 % q) C# W7 v1 Q0 N1.4.8融入编程现实16# {, V! ~* u- `- e- q% k: _- S
1.5本书的约定17& t _3 U5 I: q2 r6 T
1.5.1关于一些术语的翻译17& Y2 L3 a7 x0 `4 n! w o
1.5.2关于代码中的注释17 ; q9 K) A; R( P% S5 ^6 W1 b1.5.3关于本书中的代码示例与实验平台18 4 j/ f9 `. b) \& z4 r% l第2章保证稳定性和兼容性19 / k: g! a9 Q- m7 j g2.1保持与C99兼容19 * F" \$ C" Y, F/ x7 m8 J2.1.1预定义宏19 1 x8 Z" k* J) S1 r2.1.2_func_预定义标识符20. E; o0 D' b# z
2.1.3_Pragma操作符220 ?6 [* F0 l2 X: a& b* k
2.1.4变长参数的宏定义以及_VA_ARGS_224 h6 K+ N% t0 M, \. M4 \; I" [
2.1.5宽窄字符串的连接23- ^+ ]0 O9 Z/ ~0 v
2.2longlong整型23 ) l9 P2 i# k& s% l! ^- c2 K0 s, j9 t+ X2.3扩展的整型25 , k- t3 O9 t9 w; {! W+ R2 ^9 m: Q2.4宏_cplusplus26 ) U% W. E) C# ^* [9 s2.5静态断言27( i8 W5 v5 }; d; y9 c, s, u. N! k T
2.5.1断言:运行时与预处理时27 8 b, K+ k8 {" c1 Q$ s0 ^7 j3 `2.5.2静态断言与static_assert28 , n" M( I3 {9 A5 q2.6noexcept修饰符与noexcept操作符32 4 K5 T+ S4 o8 Z2.7快速初始化成员变量368 K6 w2 Q5 m; E
2.8非静态成员的sizeof39 5 E( J% r6 l d( p6 Y2.9扩展的friend语法40 6 r. X0 N: Y! _8 R# j# \. d2.10final/override控制44 $ s% [ `/ g4 _; Y2.11模板函数的默认模板参数48) E/ I# l" `3 K0 c+ ?
2.12外部模板50% F0 j! X" F: K- Q5 d
2.12.1为什么需要外部模板50 % M+ F# K9 z; m0 a" m! W" T" X2.12.2显式的实例化与外部模板的声明525 b! [7 E0 C9 u, a2 S& p
2.13局部和匿名类型作模板实参54 f2 \% f0 a$ d( e0 n& T2.14本章小结55 2 J: _9 r! G5 U( H8 I3 A/ \6 a+ K# {第3章通用为本,专用为末57 % J$ B; }( H; o# Q& I3.1继承构造函数578 ?7 n8 K d& b7 b7 S2 p4 D
3.2委派构造函数62 & y7 N- l1 ~/ i3.3右值引用:移动语义和完美转发68 - O+ h; P7 v. @; ~; @3.3.1指针成员与拷贝构造68% P* m/ J6 G, @& ]) H
3.3.2移动语义69! j: ^% {+ Q; G. [- ^
3.3.3左值、右值与右值引用75! J3 f3 ?- K" B4 u5 J
3.3.4std:move:强制转化为右值801 O* d; G- J( Y8 c
3.3.5移动语义的一些其他问题82 . i& j! h0 a4 \, g4 r: }7 `9 _. f& B3.3.6完美转发85 # u' T* X8 x3 d3 d3.4显式转换操作符891 T5 l: s; |* k
3.5列表初始化92 9 O% G( x5 w% ~8 o, q4 C6 M) y' i3.5.1初始化列表92 . s" F# T3 z7 B V- y- C8 p3.5.2防止类型收窄96 # J% Q7 \1 ~5 @8 t3.6POD类型98 ) \, t. c: e) [+ D$ P$ l3.7非受限联合体106 3 \) V( w0 _. U5 e. |* n% m3.8用户自定义字面量1109 d# _9 [% Z5 v( \4 g
3.9内联名字空间113 + W1 {% J: s% {) X6 b* g3.10模板的别名118 % W3 B) h; w' o7 L; k- _3 S- [3.11一般化的SFINEA规则119% k5 r* K& u- A- @* X
3.12本章小结121 % j4 h+ p; P! `* |+ U) j第4章新手易学,老兵易用123) r" D. }, z8 C( u
4.1右尖括号>的改进123! o1 V6 ?: W0 O! g r$ d
4.2auto类型推导124' e ^( r+ K1 n, o2 r0 W
4.2.1静态类型、动态类型与类型推导124: I0 R2 R! _8 D: l7 T1 s
4.2.2auto的优势126 P9 u# w- u) N5 o
4.2.3auto的使用细则130 2 r [8 s3 K, A+ ~4.3decltype134) F0 h; ~6 g+ C* R
4.3.1typeid与decltype134 , i( V" Z* X6 W' X0 s4.3.2decltype的应用136 J' v- }; ^2 P: H% |4 C; i4.3.3decltype推导四规则140 : Y8 Q, U+ @* c4.3.4cv限制符的继承与冗余的符号143$ S* A6 m, O. N& ` w* L
4.4追踪返回类型145 ! t6 |: i1 R" i$ V+ y4.4.1追踪返回类型的引入145 4 k3 C( r( C) K. u* g |* i4 W4.4.2使用追踪返回类型的函数146 4 Y. O3 L; h5 Y7 G4.5基于范围的for循环150 ! j+ p# G2 u& C7 q3 y1 ~: \- Q2 e4.6本章小结1539 u( a3 K, _2 v% q
第5章提高类型安全155- S( h% j) T" t: c7 ~
5.1强类型枚举155 3 l5 i) \# H k9 k; [! T5.1.1枚举:分门别类与数值的名字155: p* x2 ~' j" A5 d, M5 J1 p8 D
5.1.2有缺陷的枚举类型156 ( f9 E6 h% ~2 E: F4 ]5.1.3强类型枚举以及C++11对原有枚举类型的扩展160 / }! [0 W+ b- m8 e) x7 _0 f# @5.2堆内存管理:智能指针与垃圾回收163 . n% p8 `* ^4 c$ T" T+ {3 x5 ~5.2.1显式内存管理163 7 D( z7 k! |8 t6 W1 [/ h8 Z5.2.2C++11的智能指针164# x( L- L4 E+ `8 }6 _/ s
5.2.3垃圾回收的分类167 ' o7 Q9 D" x3 O5.2.4C++与垃圾回收169' q& y2 z8 ?/ B% v" I7 M! a
5.2.5C++11与最小垃圾回收支持170 & i- M& u% \. G2 J& Z$ A5.2.6垃圾回收的兼容性1729 W" e, V/ {+ H4 ^" W! q8 k; h1 _
5.3本章小结173( z* u: F$ r" w- g
第6章提高性能及操作硬件的能力1743 n$ y7 L I, A7 O( c. V
6.1常量表达式174& x" A; p8 M w- k, n2 o
6.1.1运行时常量性与编译时常量性174 ( a5 P8 Z2 z) Q) ?6.1.2常量表达式函数176 ! b& Z4 R2 `1 X2 B- H6.1.3常量表达式值178 S" _+ y1 ^- s, N8 p% |+ L" u
6.1.4常量表达式的其他应用180 . M: v8 ^! ]/ F# R/ n8 t6.2变长模板183 + m) m& L9 r |5 @8 h8 }4 `1 ~2 C" a6.2.1变长函数和变长的模板参数183 * k# g1 Z" e1 z4 y6.2.2变长模板:模板参数包和函数参数包1852 C& X# M& x C1 B
6.2.3变长模板:进阶189 E' u s( A' A* v: U$ c+ U6.3原子类型与原子操作1969 C3 k+ o1 d' t3 [
6.3.1并行编程、多线程与C++111961 W" p0 m: G/ r- |
6.3.2原子操作与C++11原子类型1975 Y/ k% j; B4 |* v8 P# d7 s& A
6.3.3内存模型,顺序一致性与memory_order203 6 \! U; ~- \4 g$ ^' q3 b* J( d2 v6 l6.4线程局部存储2143 z a6 _$ T+ [5 h2 C
6.5快速退出:quick_exit与at_quick_exit216 ! E4 z- G( t( [( R: m6.6本章小结219$ {7 a" e/ b7 O6 a
第7章为改变思考方式而改变2205 Y% r0 T4 Q; p/ W
7.1指针空值—nullptr220 a7 R5 b. F3 V4 I/ i! J0 f- i
7.1.1指针空值:从0到NULL,再到nullptr220* e2 g/ Q2 p- p! L
7.1.2nullptr和nullptr_t223% J7 W( U V0 Y6 p2 t. b
7.1.3一些关于nullptr规则的讨论225 ' _* B8 _1 L) h7 D7.2默认函数的控制227 : a- N3 E6 R" c7.2.1类与默认函数227 0 y K5 k3 e9 p$ N8 p$ }% Z+ ~7.2.2“=default”与“=deleted”230 ( ]% {4 R/ E ?! g+ @" j7.3lambda函数234 8 t7 Z5 U: G7 F* j1 @1 O% _7.3.1lambda的一些历史234 5 C: ?% y' _& B! U- G% i- Z7.3.2C++11中的lambda函数2352 A4 m' N& L. x
7.3.3lambda与仿函数238: F5 v+ L5 d5 Z5 K6 q; e$ g: M$ F
7.3.4lambda的基础使用240 . Y0 \9 o2 w) L" y7 h* ^' K! X7.3.5关于lambda的一些问题及有趣的实验2434 u w# K$ o! U/ s
7.3.6lambda与STL247 / b$ ]; S" Q3 j7.3.7更多的一些关于lambda的讨论254 Q9 s9 w+ ?" n% O* p7.4本章小结256 & `4 P* x; _* v, t0 q第8章融入实际应用258 1 R+ F/ x. s' b, a' c8.1对齐支持258 4 }% _( O( l1 a1 L8.1.1数据对齐2581 f/ n1 w0 `8 m x3 `
8.1.2C++11的alignof和alignas261 0 W; J# M% Q: |5 a/ C+ v' R. E8.2通用属性267 ' F! F m0 `6 z8.2.1语言扩展到通用属性267 + {' _6 G& v* ]4 j( `. d8.2.2C++11的通用属性268 # w9 A$ e8 r' d0 H8.2.3预定义的通用属性270& f3 g7 Q5 ?! v6 E8 w3 ~2 Y
8.3Unicode支持274 6 `6 R" e; x& V8.3.1字符集、编码和Unicode274. E4 Q, F8 A, q2 E! H* }3 m, }0 U
8.3.2C++11中的Unicode支持276 / A! S1 a3 V7 M9 y7 o, a8.3.3关于Unicode的库支持280: j$ Y& c, Y. @7 \8 |% F/ ~
8.4原生字符串字面量284 - o( ^; Z l9 i2 z: o Z8.5本章小结286 3 M' w% ~) {7 E* `, `" [附录AC++11对其他标准的不兼容项目287. v/ d6 P6 ^. X5 }* ?$ _3 i" t
附录B弃用的特性294( _; C+ u% Y K: G8 v2 M: l) ^
附录C编译器支持301 7 v& K. t- W1 C8 a附录D相关资源304' [' f7 `/ A; {5 U# z8 C" K) J
9 U# d' c2 f, q8 e4 v' b" a. s
* H% p P# Y4 \& }& P 封面; {7 _/ p c8 [: S