数学建模社区-数学中国

标题: 深入理解C++11:C++11新特性解析与应用 [打印本页]

作者: 数学中国—罂粟    时间: 2014-7-25 10:30
标题: 深入理解C++11:C++11新特性解析与应用
本帖最后由 数学中国—罂粟 于 2014-7-25 10:31 编辑
8 u8 i; ^3 \( a5 k9 [
# `# u( m  _  h* B; m( [! ^内容简介, C8 o( u! V, J, J+ }# C2 L4 }
深入理解C++11:C++11新特性解析与应用》内容简介:国内首本全面深入解读C++11新标准的专著,由C++标准委员会代表和IBM XL编译器中国开发团队共同撰写。不仅详细阐述了C++11标准的设计原则,而且系统地讲解了C++11新标准中的所有新语言特性、新标准库特性、对原有特性的改进,以及如何应用所有这些新特性。- c2 Y: m9 ?$ h% D' W- Y
深入理解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的相关资源。! G2 h; B) d( C2 W& N& a& U
; `# _; ~- B# D7 ?  H5 O& ^6 R
编辑推荐( ~8 ]8 y9 V: e2 w
深入理解C++11:C++11新特性解析与应用》编辑推荐:C++标准委员会成员和IBM XL编译器中国开发团队共同撰写,权威性毋庸置疑。系统、深入、详尽地讲解了C++11新标准中的新语言特性、新标准库特性、对原有特性的改进,以及所有这些新特性的应用。
: [( \; w+ s" t) H6 J7 U  X. }8 _! O- f. m& p" |' P& o
作者简介
6 @! X* y* }" I7 U  @作者:(加拿大)Michael Wong IBM XL编译器中国开发团队8 |2 \1 ?+ B. U' ^- d+ R! f- _
2 {0 w2 t, T$ ?) E
Michael Wong,C++11标准委员会(WG21)委员,WG21加拿大代表团团长及IBM公司代表(投票人),WG21 SG5(transactional Memory study group)学习小组组长。除此之外,Michael还是OpenMP委员会的CEO,SCC(Standards Council of Canada)的副主席。
- m0 J5 ~4 e! @! q- t9 @, r  R0 aMichael是多个C++11/OpenMP/STM新特性的合作编写者,活跃于各种技术会议,而且为Programming Committee of Boost以及IWOMP等国际会议服务。Michael也是IBM公司的高级技术专家,领导IBM XL C++编译器、XL C编译器的开发工作,当前致力于IBM编译器的C++11新特性部署。Michael在并行编程、C++基准测试、对象模型、泛型编程、模板元编程等多个技术领域均有涉猎,并且在对象模型以及事务内存等方面取得过多个专利。
- y8 G3 y$ v) ~早年Michael于多伦多大学获取得了天体物理学的学士学位,并在滑铁卢大学获得了硕士学位。在加入IBM之前,Michael曾先后供职于大卫?邓禄普天文台(David Dunlap Observatory),CDC公司(Control Data Corporation),BMO Nesbitt Burns公司等。
+ Y7 n. g. d; i5 m) r! E1 [& H0 LIBM 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新特性的开发工作。, D; B2 {: Z, `) T
% i* A: K8 x8 P# p( \- g" M
目录免责声明
. b1 x% p% @/ H2 u- l: c
6 o0 k  X) f5 V: `/ y前言
- h' w% i) _* K" ^第1章新标准的诞生1
8 |( b: q2 D- {; d# }8 ~% F* ~4 O1.1曙光:C++11标准的诞生1
3 n1 |( x6 E6 q5 [1.1.1C++11/C++0x(以及C11/C1x)——新标准诞生1& E- X9 v9 r$ b: v5 c, o; w# F) t
1.1.2什么是C++11/C++0x2
" d( M5 h; X6 {2 n% G4 ]1.1.3新C++语言的设计目标3" s, [0 L% T! `, J+ o9 f
1.2今时今日的C++5$ E4 \% i' v# L: U9 I8 `! E5 U+ E
1.2.1C++的江湖地位5# p) q, |/ l5 A8 _
1.2.2C++11语言变化的领域5+ c1 @# N" ]6 O% S
1.3C++11特性的分类7) L! c2 o5 }8 I2 h3 X+ P
1.4C++特性一览11
) }) c  m$ H  c" u7 w4 Q5 z, s$ g1.4.1稳定性与兼容性之间的抉择11: z' j9 h5 `# \4 X" W
1.4.2更倾向于使用库而不是扩展语言来实现特性12
1 V4 d+ g& `; e/ I1.4.3更倾向于通用的而不是特殊的手段来实现特性13% ~3 M' q% o1 _" i: ^
1.4.4专家新手一概支持137 E$ N$ Y8 C0 R2 \/ Y
1.4.5增强类型的安全性14
  ~) h! B$ m* ]/ N& G1.4.6与硬件紧密合作14
7 }# X, Z' J4 f9 z4 z% I1.4.7开发能够改变人们思维方式的特性15
0 a: p& Y: v% v9 L6 z1.4.8融入编程现实16: A9 ], L; m+ G6 `9 @+ V& o2 z- v
1.5本书的约定17
% Y7 A3 x: \3 h) N1.5.1关于一些术语的翻译17
5 m. z1 H& x; A$ L) [1.5.2关于代码中的注释179 P  Y4 J' a" z  ]# N1 d) [
1.5.3关于本书中的代码示例与实验平台18. J  J- X9 N8 Y; C
第2章保证稳定性和兼容性19
; B1 B) p9 [8 i) O' n2.1保持与C99兼容19* {: I  y/ I+ N+ k; K2 a( k
2.1.1预定义宏196 P7 e7 X, l  j/ k; _) H
2.1.2_func_预定义标识符20
( s: }2 ^7 G$ h) r4 ^3 u2.1.3_Pragma操作符22; a" R7 A$ K; x' g9 {% D4 s
2.1.4变长参数的宏定义以及_VA_ARGS_22
, e/ {/ m) {; w) J2.1.5宽窄字符串的连接23
1 H5 n: _) N  R/ t! q2.2longlong整型23
+ D7 \6 K2 a- D9 E$ _& C0 Q2.3扩展的整型25$ B! h# Q4 }8 V7 s7 D2 ?
2.4宏_cplusplus26! H% {! w' ?1 @1 w4 Z- R. S6 {9 `
2.5静态断言27
3 H3 _" y6 ^* y5 g) K5 L) n2.5.1断言:运行时与预处理时27
' D- w& l3 C& N' b8 ?( p6 `2.5.2静态断言与static_assert28
" r3 l$ o5 L' f% \6 \/ [2.6noexcept修饰符与noexcept操作符327 l; e& I  S. H  ]5 ^7 M% B
2.7快速初始化成员变量36' t0 q* G3 K( s3 S' w8 }
2.8非静态成员的sizeof39- p4 T4 E) j; g' a  [9 I  b
2.9扩展的friend语法40! R' p/ g8 t, j3 E% f
2.10final/override控制44
: D, N9 S$ x, R5 X* N# u2.11模板函数的默认模板参数48
5 H% [5 X6 y; e0 P) V2.12外部模板50- ]0 |% q  `/ x0 z9 n# ?
2.12.1为什么需要外部模板501 w) V8 W, L" R
2.12.2显式的实例化与外部模板的声明52
  V# M% E2 m3 v! o" Y$ W2.13局部和匿名类型作模板实参54
. n0 H( G& A+ z( L% y% a+ K2.14本章小结55
; E/ J  p# c+ a/ Q5 q- G8 ]第3章通用为本,专用为末57
) q+ P8 M4 D: G3 ~' C( c0 L3.1继承构造函数570 n7 K. A  y8 z9 G, u1 x8 L
3.2委派构造函数62
( i: [0 u) @' K" f3.3右值引用:移动语义和完美转发68. J* [; c' O3 t" _( N
3.3.1指针成员与拷贝构造686 J" d# w. f3 K" D
3.3.2移动语义69
1 n# {7 k: K; v9 N! P7 Q) U# D3.3.3左值、右值与右值引用75
  T" ]( ~3 ^) a6 [2 M2 U3.3.4std:move:强制转化为右值80
( k  g* R5 e) [' e0 z3.3.5移动语义的一些其他问题82
" I/ g3 Q# T4 _6 k3.3.6完美转发85# V4 E$ D- l0 d0 m7 Q1 V" X
3.4显式转换操作符89
5 y0 S4 U3 ^7 M; S9 c  q3.5列表初始化924 O! {  ]5 d- K  q: v
3.5.1初始化列表92
6 S# ?* p( n2 `1 @- V4 O3.5.2防止类型收窄964 e- o. D6 F" q; A4 C
3.6POD类型98
4 G- L# i0 b: O/ e7 A3.7非受限联合体106
) X( m1 p* Y$ v3.8用户自定义字面量110/ c7 }6 D0 k- @. W/ a! q
3.9内联名字空间113: [2 h- E9 H6 ^' Z& R* d
3.10模板的别名118
5 a5 a& x9 I8 O( K2 H3.11一般化的SFINEA规则119: Q/ B& ], K/ O2 J1 d% v7 C3 U
3.12本章小结121
7 L/ b2 X( p/ }5 j/ H第4章新手易学,老兵易用123
0 J2 e4 T+ W4 s5 L% }$ T# G4.1右尖括号>的改进123
( K3 e9 J& x4 T/ n5 b4.2auto类型推导124
& w' M2 r# X8 N$ Z4 C9 _4.2.1静态类型、动态类型与类型推导124
, ?' i5 ~/ [/ s* ?' G4.2.2auto的优势126
3 D' l! V9 a/ H% z8 _3 F3 M4.2.3auto的使用细则130
8 y! M+ O8 o$ Z4 [7 u2 i; y4.3decltype134
3 X$ n) t+ C, `/ ]1 f4.3.1typeid与decltype134
9 s* M0 v/ v8 l( T8 I& |' d4.3.2decltype的应用1368 P# Y4 w1 h+ H: v
4.3.3decltype推导四规则1405 L" ^) R2 @1 x1 a& V
4.3.4cv限制符的继承与冗余的符号143
* D+ g/ e  H$ o) i7 B4.4追踪返回类型145
7 J0 d' N5 Y8 @: m& B+ G4.4.1追踪返回类型的引入145
* f8 Y, f8 q" }1 M- z9 n4.4.2使用追踪返回类型的函数146
* x& S. Z) `) I4 Y8 P, D* x6 j, x4.5基于范围的for循环150
; ]7 L* {# i' m, G+ I9 C4.6本章小结153
: _0 T$ L+ Q( h9 j/ b. Y0 c第5章提高类型安全155" c( t- T) D9 m6 R$ Z, J+ F/ ?
5.1强类型枚举155
: i1 W% @5 Y. A# L1 o$ U! u5.1.1枚举:分门别类与数值的名字155, ~/ F' K" G, u/ d5 m
5.1.2有缺陷的枚举类型156/ y7 d5 X" N3 B! z/ J7 |
5.1.3强类型枚举以及C++11对原有枚举类型的扩展160! S6 a) F: u& |; {6 o
5.2堆内存管理:智能指针与垃圾回收163- o/ K* R7 r: |) C& t
5.2.1显式内存管理163
! ^" g+ B. ^) a4 d: U" A2 ?5 z5.2.2C++11的智能指针164
4 D, _8 r( ?3 M0 \6 c6 t7 Z, F& a0 J5.2.3垃圾回收的分类167
$ \( f% z/ L2 z0 ~& c5.2.4C++与垃圾回收1699 N- |# M) S, e& @
5.2.5C++11与最小垃圾回收支持1702 V5 N) p; ^# i7 J' f+ _2 }
5.2.6垃圾回收的兼容性172
4 ^% h1 n2 Q5 h1 C* c5.3本章小结173
# ~) s5 _9 s  t, n0 [第6章提高性能及操作硬件的能力1748 G  n2 K( H9 j) s# ?
6.1常量表达式174
1 Z5 s; S+ l) U  G, J  u3 N6.1.1运行时常量性与编译时常量性174
* g) ~, l! J! G7 I' y# ]# v/ ~+ a6.1.2常量表达式函数176( g3 `3 t, o  {' m- k- j% B
6.1.3常量表达式值178
8 C' B% x8 O7 N, Z6.1.4常量表达式的其他应用1809 ]; n- {/ n; X9 D* h, o
6.2变长模板1832 ?7 D# @6 `9 Q/ P$ K- f
6.2.1变长函数和变长的模板参数183- ~% o* g) g6 N9 I% ?% }5 S
6.2.2变长模板:模板参数包和函数参数包185! _* d8 U- l$ u9 C' ?- n& z
6.2.3变长模板:进阶189
! P8 |4 X2 H" f" R$ ^6.3原子类型与原子操作196
6 d3 o# R5 ]* L' s6.3.1并行编程、多线程与C++111961 ?2 F3 C0 m: N1 v4 X+ l
6.3.2原子操作与C++11原子类型197. e' B: C0 y; P7 b! j
6.3.3内存模型,顺序一致性与memory_order203
. h; S2 }8 Q8 T6.4线程局部存储214
5 z6 j3 G0 U9 N% B6.5快速退出:quick_exit与at_quick_exit216
+ \& ~+ R9 y$ a! t6.6本章小结219
$ C3 H! z8 ]. t9 A# g第7章为改变思考方式而改变220
! z* s3 R: H" W& L7.1指针空值—nullptr2208 V* f! n0 q& p% N0 z
7.1.1指针空值:从0到NULL,再到nullptr220
& l# ], O3 A  ?, O7.1.2nullptr和nullptr_t2232 Y8 L( R! G3 I- n- Y# ]
7.1.3一些关于nullptr规则的讨论2253 h, Q" w  r" ]
7.2默认函数的控制227
. t' K* Q6 C6 i1 G7.2.1类与默认函数2274 F9 I! T. I& b: i: @9 V
7.2.2“=default”与“=deleted”230" D: K, A: k( j. I0 A# E( l
7.3lambda函数234
  `& M9 u* {; |& n' M% N7.3.1lambda的一些历史234. v" c# l' \# c' ?: _
7.3.2C++11中的lambda函数235' J% ^( p* Y7 G% S$ s. h' x* {
7.3.3lambda与仿函数2380 H) C5 H. z  _. r! D
7.3.4lambda的基础使用240
5 D, p6 n' S* f$ v6 S9 B7.3.5关于lambda的一些问题及有趣的实验2435 S; U" T; U3 N2 V2 Z# u0 b; ?
7.3.6lambda与STL247, T# r! g$ t; W$ f4 O
7.3.7更多的一些关于lambda的讨论2547 ?# X  C8 n- [2 \( P9 o
7.4本章小结256( E5 A- i4 j, t; r+ j
第8章融入实际应用258
" K( ?. e+ l% K$ G3 i8 L9 ^8.1对齐支持258- f1 K- M# V6 v4 t' Z' J2 v% R8 |
8.1.1数据对齐258- p5 Y- H2 V% s& d3 ?  c
8.1.2C++11的alignof和alignas261' c9 U" D9 e2 ]( J! ?
8.2通用属性267
! M; p% E) c# @4 O! {8.2.1语言扩展到通用属性267. w3 H. i1 W* G- K7 }6 ?7 T% L
8.2.2C++11的通用属性268
3 s: P& A  x* l0 c+ ]" L$ {8.2.3预定义的通用属性270
# g" n1 [7 O8 A  V* d; H8.3Unicode支持274
) ?5 ?3 U+ ]  Z7 u# c9 T5 e0 `3 \8.3.1字符集、编码和Unicode2745 ~1 {+ Y' T" v! i. R
8.3.2C++11中的Unicode支持276
8 G6 s- E. F* ], l8.3.3关于Unicode的库支持2802 L6 B! i/ Z* Q0 Y9 Q4 @
8.4原生字符串字面量284
' t( n. _( j5 y( e, @) @& v8.5本章小结2863 Y2 w9 ?6 m9 \( |
附录AC++11对其他标准的不兼容项目287
2 u9 J* b' Q3 i( Y7 D, |( V附录B弃用的特性2948 q. d2 Y7 F, J8 ~
附录C编译器支持301$ k) t, ?5 N) Q' N! _
附录D相关资源304
0 {% ]% x" s: k9 q( K- a
) m4 ?& c+ T' k9 ~8 n' L
" D% o% t; |7 M+ R- h- H
封面3 W0 v2 ?. D$ e
1.jpg
) ~& a3 ?1 @/ h8 o0 m% r5 |/ N. b5 Z9 ?0 e! @% Z& }, l5 T
截图+ N5 w' h; K$ p) z& ~/ e
2.jpg / U" D/ D, B$ B) P3 U
4 L$ |4 c9 H* s) c

& Z3 I/ ]7 H& L$ [: l: r! W# H  G8 i' H% m& m

作者: 叶小伦    时间: 2014-7-25 22:06
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
作者: ッ坚守那仅存    时间: 2014-7-31 10:09
顶!!!!!!!!!!!!
作者: 木头风火轮    时间: 2014-7-31 10:26
赞一个  学习学习,
作者: 模天大楼    时间: 2014-8-1 21:59
顶啊。。。。。。。。。。。。。。。。。
作者: drrile    时间: 2014-8-2 11:40
学习学习..
作者: drrile    时间: 2014-8-2 11:40
学习学习..
作者: 风树    时间: 2014-8-9 17:00
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
作者: silence123    时间: 2015-1-6 12:42
WOXIANGkankan) H: ~  F$ u) M- k* Y8 p5 J; ?

作者: gancm    时间: 2015-1-6 17:17
看看。。。。。。。。。
' {* b5 {; O2 _  U5 d( ]2 w9 Q
作者: 慢跑20    时间: 2015-1-21 12:03
不错,长盛不衰的语言7 g7 |; S% V2 s% h, p

作者: zszzsz111    时间: 2015-2-1 22:25
不错的,谢谢楼主分享~
' w2 R4 u' p  [
作者: jiangtai    时间: 2015-2-3 14:11
挺不错的,支持一下1 {0 C4 k  Q* V+ y3 V

作者: jiay    时间: 2015-2-3 14:30
good..............
" S6 \+ v# s6 Q! m
作者: LYJA    时间: 2016-9-4 13:04
It is so good,thank you very much!
7 l7 k1 ]' {& Q




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5