数学建模社区-数学中国
标题:
深入理解C++11:C++11新特性解析与应用
[打印本页]
作者:
数学中国—罂粟
时间:
2014-7-25 10:30
标题:
深入理解C++11:C++11新特性解析与应用
本帖最后由 数学中国—罂粟 于 2014-7-25 10:31 编辑
$ B: |& Z1 W) P. p7 M, l
; g, @- _% M. c: D: y
内容简介
4 C8 p# S) _( l2 Q# ?
《
深入理解C++11:C++11新特性解析与应用
》内容简介:国内首本全面深入解读C++11新标准的专著,由C++标准委员会代表和IBM XL编译器中国开发团队共同撰写。不仅详细阐述了C++11标准的设计原则,而且系统地讲解了C++11新标准中的所有新
语言
特性、新标准库特性、对原有特性的改进,以及如何应用所有这些新特性。
$ k# X0 A3 R" u* J: B, e
《
深入理解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的相关资源。
1 P. H1 _; h0 _4 [, Z, ^ t" J
6 w" r0 ^! [; p( I! r# `, p
编辑推荐
. r( { z" p3 g8 ~( d0 W: P! O# e
《
深入理解C++11:C++11新特性解析与应用
》编辑推荐:C++标准委员会成员和IBM XL编译器中国开发团队共同撰写,权威性毋庸置疑。系统、深入、详尽地讲解了C++11新标准中的新语言特性、新标准库特性、对原有特性的改进,以及所有这些新特性的应用。
% z2 p' n; l t2 m; k, h8 ] [
( J: {; r% R! e5 ?" W
作者简介
' Q1 v. A5 R$ w; }3 B- x% g
作者:(加拿大)Michael Wong IBM XL编译器中国开发团队
& c( m+ N" C6 V. D
7 N/ f( M1 m7 Z* p7 h7 Q
Michael Wong,C++11标准委员会(WG21)委员,WG21加拿大代表团团长及IBM公司代表(投票人),WG21 SG5(transactional Memory study group)学习小组组长。除此之外,Michael还是OpenMP委员会的CEO,SCC(Standards Council of Canada)的副主席。
4 z7 I3 ~7 ~* h8 b9 j* F+ a
Michael是多个C++11/OpenMP/STM新特性的合作编写者,活跃于各种技术会议,而且为Programming Committee of Boost以及IWOMP等国际会议服务。Michael也是IBM公司的高级技术专家,领导IBM XL C++编译器、XL C编译器的开发工作,当前致力于IBM编译器的C++11新特性部署。Michael在并行编程、C++基准
测试
、对象
模型
、泛型编程、
模板
元编程等多个技术领域均有涉猎,并且在对象模型以及事务内存等方面取得过多个专利。
, \, u7 _0 \: E0 Q5 X4 X+ N
早年Michael于多伦多大学获取得了天体物理学的学士学位,并在滑铁卢大学获得了硕士学位。在加入IBM之前,Michael曾先后供职于大卫?邓禄普天文台(David Dunlap Observatory),CDC公司(Control Data Corporation),BMO Nesbitt Burns公司等。
8 I1 y$ F3 t; c! z0 p! r& U
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新特性的开发工作。
' Y3 J9 x l- B3 o' o$ o
( T0 S% F$ ]" ?( a. Y
目录
免责声明
8 h* G6 f3 L1 f9 r% f. I7 J9 @
序
* E/ O3 B5 @. l1 C
前言
$ g7 U {+ d8 k" e
第1章新标准的诞生1
& y* J+ R* f" K5 k
1.1曙光:C++11标准的诞生1
/ H5 [/ l6 }* x
1.1.1C++11/C++0x(以及C11/C1x)——新标准诞生1
* H1 E$ K. O- `/ n3 y/ E
1.1.2什么是C++11/C++0x2
" v0 h& G6 w1 y3 Z% l
1.1.3新C++语言的设计目标3
% `3 n& a7 N' W; B% n2 j
1.2今时今日的C++5
: q2 r) H4 i( s0 z9 x
1.2.1C++的江湖地位5
. ]5 y, `( W& R+ r8 P. K+ d
1.2.2C++11语言变化的领域5
0 V" N* h, p$ ]2 Y
1.3C++11特性的分类7
o6 q9 B) m: u6 u4 X( C9 q
1.4C++特性一览11
2 I% b0 \ Z* Y0 w
1.4.1稳定性与兼容性之间的抉择11
, y" C2 q6 m% u8 `0 A( a6 x
1.4.2更倾向于使用库而不是扩展语言来实现特性12
' m& s0 E& `; k; d: o1 K
1.4.3更倾向于通用的而不是特殊的手段来实现特性13
& N8 J3 e2 e% U5 N$ g% ^! L
1.4.4专家新手一概支持13
9 E5 s: h" W" K
1.4.5增强类型的安全性14
0 m9 ]; S' d4 c6 |9 l& {# M, V0 r
1.4.6与硬件紧密合作14
1 E- }* X! V: _2 S& C8 G$ f( ^
1.4.7开发能够改变人们思维方式的特性15
& N* w: W1 M2 {& R% ?! Q x
1.4.8融入编程现实16
1 y% R2 Z' r& j
1.5本书的约定17
9 M0 y" `7 s. M" T, k( f
1.5.1关于一些术语的翻译17
# e/ c8 o+ [) K ?& {# Y: T( h
1.5.2关于代码中的注释17
2 x" i2 y7 I1 ~/ @
1.5.3关于本书中的代码示例与实验平台18
) s7 N. I3 s8 Y# B
第2章保证稳定性和兼容性19
- I- n" C; k8 |/ P7 o) `3 b; |! }5 B
2.1保持与C99兼容19
7 y+ H5 e! y1 g. T' i
2.1.1预定义宏19
% }* {# M* ~. M4 r
2.1.2_func_预定义标识符20
: C4 V. d1 z3 \1 F$ ~. P
2.1.3_Pragma操作符22
% b8 |# b1 Z n) D! G- B( Q$ g
2.1.4变长参数的宏定义以及_VA_ARGS_22
: B/ \% b6 p0 I/ {
2.1.5宽窄字符串的连接23
0 ?1 R1 \: j: s& H
2.2longlong整型23
, Q7 k3 C; H. H5 Y6 }; c w- G) R
2.3扩展的整型25
6 d3 Q+ A0 ^: Y+ m3 c
2.4宏_cplusplus26
$ U! W* K1 C& L3 E
2.5静态断言27
5 a' k3 a( |0 R6 n- T$ |' ^
2.5.1断言:运行时与预处理时27
, b, @1 W- b8 G- ]2 L \# }! U
2.5.2静态断言与static_assert28
5 g! D, M* Z3 x& q! n
2.6noexcept修饰符与noexcept操作符32
* f3 I2 T2 O2 v/ l. m& z. J
2.7快速初始化成员变量36
) u% c2 A! q5 a: T7 o
2.8非静态成员的sizeof39
8 v. b/ I" U- t o4 T/ b
2.9扩展的friend语法40
; r$ a }2 t1 r2 q9 F
2.10final/override控制44
- h6 d0 h+ _' c, K
2.11模板函数的默认模板参数48
+ l- p$ F! I* c5 c9 j( ?
2.12外部模板50
4 z! z9 n% r1 P$ F% I
2.12.1为什么需要外部模板50
7 z3 u) O; |/ V |8 \" O F/ m* k& U
2.12.2显式的实例化与外部模板的声明52
4 O O& u. W9 z! ^1 g' o& w/ U6 R
2.13局部和匿名类型作模板实参54
3 M% x# I& s3 K( T9 A" v9 I. l
2.14本章小结55
$ u9 u/ }( n+ a) e; e
第3章通用为本,专用为末57
5 F3 V, L6 e0 S0 k4 k* z/ j; P6 c2 O8 K9 j+ B
3.1继承构造函数57
/ O; X: F% k1 Z9 P0 p, ?/ ^; D; v
3.2委派构造函数62
) f% s, B: [7 K" T% h! \( S
3.3右值引用:移动语义和完美转发68
9 t$ r: C1 M- W. A
3.3.1指针成员与拷贝构造68
# e- Z$ e! w: |( d0 `; L, e& n* a. H
3.3.2移动语义69
; x; t4 k% l& o# m$ d/ m ?
3.3.3左值、右值与右值引用75
8 D' ]4 [- r' i1 M7 N* v
3.3.4std:move:强制转化为右值80
. t( o# d3 Z$ f B, M2 n8 o
3.3.5移动语义的一些其他问题82
. M, S7 t# Y# ~0 d" A
3.3.6完美转发85
+ h: x3 P. B7 Z0 q: w
3.4显式转换操作符89
/ B6 Q6 z$ Y% z1 D
3.5列表初始化92
Q6 k( F9 O0 b, M6 E) i: e0 ^' }
3.5.1初始化列表92
+ o/ q7 Z$ x& X# J
3.5.2防止类型收窄96
" k; s6 y1 F% Y) {, K' m3 k( Z! H; z
3.6POD类型98
8 v( ]# n% m9 a, t5 ]. }
3.7非受限联合体106
- u& W$ v) A0 }) t
3.8用户自定义字面量110
+ P* L( O/ n c$ K
3.9内联名字空间113
+ h& H' k9 J( T- g
3.10模板的别名118
7 y3 R8 r" I7 T( `0 k1 c+ O& i
3.11一般化的SFINEA规则119
1 w& f5 I. y+ Y: C6 z& u6 y" X; q. Z% k
3.12本章小结121
6 I* W% m" j# }: E( }: @8 y
第4章新手易学,老兵易用123
0 `3 R: j% u4 ], t7 r7 o; R, k
4.1右尖括号>的改进123
" }* \0 O5 V( L0 s; g
4.2auto类型推导124
9 Q9 e6 A( Y" a! O) q! L
4.2.1静态类型、动态类型与类型推导124
) t( @( e+ P9 x( a
4.2.2auto的优势126
9 U; E+ H3 W. M& C% W3 ?3 l+ k
4.2.3auto的使用细则130
9 I5 h: z+ W8 g! z
4.3decltype134
0 a4 O3 N! X4 B5 p& o# h
4.3.1typeid与decltype134
' u! p; s) j$ D
4.3.2decltype的应用136
& `* a* F; z/ P, j
4.3.3decltype推导四规则140
$ Z$ k; u, Y' E
4.3.4cv限制符的继承与冗余的符号143
$ y) _/ G$ ^6 `
4.4追踪返回类型145
* P2 @: o' b/ N! U( L2 W
4.4.1追踪返回类型的引入145
, q- m, H( j( a7 Q4 p2 j4 O0 n
4.4.2使用追踪返回类型的函数146
3 R9 v0 m) q( x3 q7 X
4.5基于范围的for循环150
$ s" w0 p' n! P8 [( N
4.6本章小结153
" q7 z: `4 y1 g- N9 S6 f& S
第5章提高类型安全155
; Y' R9 \( P! E& v
5.1强类型枚举155
+ p+ p+ G# Y3 y% H) [8 n8 _
5.1.1枚举:分门别类与数值的名字155
9 f* W( R/ p7 C% a& z( }1 Y
5.1.2有缺陷的枚举类型156
5 \' s2 q8 Y1 C0 z
5.1.3强类型枚举以及C++11对原有枚举类型的扩展160
0 \) F0 k6 W( [% C, N3 X
5.2堆内存管理:智能指针与垃圾回收163
- g: T# W; M: t! q
5.2.1显式内存管理163
" C6 Z0 |6 I) E1 K, O% K3 s6 z* G+ u
5.2.2C++11的智能指针164
* N+ x2 p' }0 j
5.2.3垃圾回收的分类167
4 p& a U; y' J5 y% ~. I# A+ W
5.2.4C++与垃圾回收169
' p6 J; ]% i/ j
5.2.5C++11与最小垃圾回收支持170
- i' c( b% a+ s' X' O$ [+ A
5.2.6垃圾回收的兼容性172
/ h o( t" x7 r6 |
5.3本章小结173
# _: F; L* u( W5 V6 F Q) U$ ^
第6章提高性能及操作硬件的能力174
5 z9 W! ^ V! f9 T/ `
6.1常量表达式174
6 }) Z0 p# O, f
6.1.1运行时常量性与编译时常量性174
1 ?, P' r6 o' `& Y% z
6.1.2常量表达式函数176
$ o& x3 a) J& w+ `1 u: j
6.1.3常量表达式值178
7 Y) [2 I$ v3 |% O
6.1.4常量表达式的其他应用180
# Q) b: |" L3 X3 j9 [
6.2变长模板183
: B0 d# l" O3 b, O6 T. V
6.2.1变长函数和变长的模板参数183
9 K9 R) S4 _0 L$ n
6.2.2变长模板:模板参数包和函数参数包185
: m7 u9 S3 Q! i# R, m2 D
6.2.3变长模板:进阶189
; w. f% y0 {$ D6 y {0 A! r3 h
6.3原子类型与原子操作196
# l1 q" N& @( [" X; o. R8 L/ I k
6.3.1并行编程、多线程与C++11196
u2 a% M; }" Y* B/ z8 G9 m
6.3.2原子操作与C++11原子类型197
7 u3 U! M5 K: s& M2 j
6.3.3内存模型,顺序一致性与memory_order203
" X/ {7 l# y2 N v: f2 `7 s
6.4线程局部存储214
& s+ @" n, R: [( X; \4 @
6.5快速退出:quick_exit与at_quick_exit216
; r: L/ o" i( S" n; r- M
6.6本章小结219
R" F8 A [# }% A0 K1 b+ i5 B0 I
第7章为改变思考方式而改变220
8 d5 T/ W+ e0 k
7.1指针空值—nullptr220
" S7 W; O8 u* Q" v4 j4 R3 U2 M
7.1.1指针空值:从0到NULL,再到nullptr220
8 s5 j& H4 }* c1 Z6 i
7.1.2nullptr和nullptr_t223
* \1 E" [) X: k! }8 M d
7.1.3一些关于nullptr规则的讨论225
u- ?1 Z* d* r, @( j! M
7.2默认函数的控制227
) T- W5 P; U+ h" r- @
7.2.1类与默认函数227
. `% m, z& l0 O: T# J8 R8 i( d3 Z9 R
7.2.2“=default”与“=deleted”230
4 n: p1 O, u& l* z
7.3lambda函数234
* g; D- ?- y, u7 t
7.3.1lambda的一些历史234
1 Y% u$ b2 d3 A3 F. S% w/ x
7.3.2C++11中的lambda函数235
% U* w# j8 I1 \, o. Y$ ~( Z
7.3.3lambda与仿函数238
& k8 i: L! l4 `) \; J/ }5 m5 @
7.3.4lambda的基础使用240
: D+ h" L& h2 m/ H8 i( J
7.3.5关于lambda的一些问题及有趣的实验243
. |% _2 N5 M% z3 P& o% l
7.3.6lambda与STL247
' H y/ C* ?, ]# l4 J; G
7.3.7更多的一些关于lambda的讨论254
) @ C( n/ w4 `. E
7.4本章小结256
% ?. X( D9 P2 F4 w3 [* d
第8章融入实际应用258
' g1 G0 s/ R8 K$ r4 \9 D
8.1对齐支持258
2 D/ x1 w4 x+ Z8 M
8.1.1数据对齐258
& p' k( o! b% H3 X/ p
8.1.2C++11的alignof和alignas261
V8 O- l5 s2 e8 X
8.2通用属性267
$ }+ N# ^$ g5 g6 s0 W
8.2.1语言扩展到通用属性267
* T7 J% [2 i3 B
8.2.2C++11的通用属性268
$ [0 k1 N" G: e% ]8 g- a
8.2.3预定义的通用属性270
0 L9 M P) A- t% I \' r0 ?
8.3Unicode支持274
1 E, X- Q- J& ~) S3 n
8.3.1字符集、编码和Unicode274
! b. j. I" m4 W: s( ~, y" v4 u) k
8.3.2C++11中的Unicode支持276
0 @% [! }6 l0 y/ E! U5 S9 ~. w1 U
8.3.3关于Unicode的库支持280
& ^/ G* K5 F6 b6 M8 I- ]
8.4原生字符串字面量284
8 E' R4 {4 w m* c0 N
8.5本章小结286
" x* S( @: y0 J( `- M% e, O
附录AC++11对其他标准的不兼容项目287
2 R0 @( ]) `8 Y) o0 z# W" v
附录B弃用的特性294
! r( g, m# f& y3 [- R/ p/ [9 s
附录C编译器支持301
& |6 }3 p6 J0 u' K# w/ J" @
附录D相关资源304
) ~! Z0 H0 P5 Z) F% p
: E2 } z* n! I) I0 A( k) A
& p+ {. e3 M& ^ \, R! S
封面
- d c0 v& h! H
2014-7-25 10:24 上传
下载附件
(101.86 KB)
, z8 i9 R2 z2 F
: _" W9 I- l) l% m+ u* |
截图
. f* Z+ f: n) W9 h' v7 n% G
2014-7-25 10:25 上传
下载附件
(301.62 KB)
& u% y3 |1 b5 C4 Z a
) C% E3 Q/ L6 p
! v& n" o5 j! @/ v% ]: Q
y1 o- e- L( G
作者:
叶小伦
时间:
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
& i* W/ `# q$ q/ a: P" V
作者:
gancm
时间:
2015-1-6 17:17
看看。。。。。。。。。
0 a3 L/ i4 a* M: F
作者:
慢跑20
时间:
2015-1-21 12:03
不错,长盛不衰的语言
! t7 b. r7 E) b- P2 s8 n+ w ~
作者:
zszzsz111
时间:
2015-2-1 22:25
不错的,谢谢楼主分享~
1 n# O; H v3 i3 {2 R0 c
作者:
jiangtai
时间:
2015-2-3 14:11
挺不错的,支持一下
3 }6 a4 F4 Z0 M8 V# S n
作者:
jiay
时间:
2015-2-3 14:30
good..............
+ N4 x: Z; }; h& b" j9 y
作者:
LYJA
时间:
2016-9-4 13:04
It is so good,thank you very much!
1 H4 Q! }/ ] s3 o3 O% C9 M
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5