数学建模社区-数学中国
标题:
深入理解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 a
Michael是多个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 L
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新特性的开发工作。
, 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 O
1.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$ g
1.4.1稳定性与兼容性之间的抉择11
: z' j9 h5 `# \4 X" W
1.4.2更倾向于使用库而不是扩展语言来实现特性12
1 V4 d+ g& `; e/ I
1.4.3更倾向于通用的而不是特殊的手段来实现特性13
% ~3 M' q% o1 _" i: ^
1.4.4专家新手一概支持13
7 E$ N$ Y8 C0 R2 \/ Y
1.4.5增强类型的安全性14
~) h! B$ m* ]/ N& G
1.4.6与硬件紧密合作14
7 }# X, Z' J4 f9 z4 z% I
1.4.7开发能够改变人们思维方式的特性15
0 a: p& Y: v% v9 L6 z
1.4.8融入编程现实16
: A9 ], L; m+ G6 `9 @+ V& o2 z- v
1.5本书的约定17
% Y7 A3 x: \3 h) N
1.5.1关于一些术语的翻译17
5 m. z1 H& x; A$ L) [
1.5.2关于代码中的注释17
9 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' n
2.1保持与C99兼容19
* {: I y/ I+ N+ k; K2 a( k
2.1.1预定义宏19
6 P7 e7 X, l j/ k; _) H
2.1.2_func_预定义标识符20
( s: }2 ^7 G$ h) r4 ^3 u
2.1.3_Pragma操作符22
; a" R7 A$ K; x' g9 {% D4 s
2.1.4变长参数的宏定义以及_VA_ARGS_22
, e/ {/ m) {; w) J
2.1.5宽窄字符串的连接23
1 H5 n: _) N R/ t! q
2.2longlong整型23
+ D7 \6 K2 a- D9 E$ _& C0 Q
2.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) n
2.5.1断言:运行时与预处理时27
' D- w& l3 C& N' b8 ?( p6 `
2.5.2静态断言与static_assert28
" r3 l$ o5 L' f% \6 \/ [
2.6noexcept修饰符与noexcept操作符32
7 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# u
2.11模板函数的默认模板参数48
5 H% [5 X6 y; e0 P) V
2.12外部模板50
- ]0 |% q `/ x0 z9 n# ?
2.12.1为什么需要外部模板50
1 w) V8 W, L" R
2.12.2显式的实例化与外部模板的声明52
V# M% E2 m3 v! o" Y$ W
2.13局部和匿名类型作模板实参54
. n0 H( G& A+ z( L% y% a+ K
2.14本章小结55
; E/ J p# c+ a/ Q5 q- G8 ]
第3章通用为本,专用为末57
) q+ P8 M4 D: G3 ~' C( c0 L
3.1继承构造函数57
0 n7 K. A y8 z9 G, u1 x8 L
3.2委派构造函数62
( i: [0 u) @' K" f
3.3右值引用:移动语义和完美转发68
. J* [; c' O3 t" _( N
3.3.1指针成员与拷贝构造68
6 J" d# w. f3 K" D
3.3.2移动语义69
1 n# {7 k: K; v9 N! P7 Q) U# D
3.3.3左值、右值与右值引用75
T" ]( ~3 ^) a6 [2 M2 U
3.3.4std:move:强制转化为右值80
( k g* R5 e) [' e0 z
3.3.5移动语义的一些其他问题82
" I/ g3 Q# T4 _6 k
3.3.6完美转发85
# V4 E$ D- l0 d0 m7 Q1 V" X
3.4显式转换操作符89
5 y0 S4 U3 ^7 M; S9 c q
3.5列表初始化92
4 O! { ]5 d- K q: v
3.5.1初始化列表92
6 S# ?* p( n2 `1 @- V4 O
3.5.2防止类型收窄96
4 e- o. D6 F" q; A4 C
3.6POD类型98
4 G- L# i0 b: O/ e7 A
3.7非受限联合体106
) X( m1 p* Y$ v
3.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 H
3.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# G
4.1右尖括号>的改进123
( K3 e9 J& x4 T/ n5 b
4.2auto类型推导124
& w' M2 r# X8 N$ Z4 C9 _
4.2.1静态类型、动态类型与类型推导124
, ?' i5 ~/ [/ s* ?' G
4.2.2auto的优势126
3 D' l! V9 a/ H% z8 _3 F3 M
4.2.3auto的使用细则130
8 y! M+ O8 o$ Z4 [7 u2 i; y
4.3decltype134
3 X$ n) t+ C, `/ ]1 f
4.3.1typeid与decltype134
9 s* M0 v/ v8 l( T8 I& |' d
4.3.2decltype的应用136
8 P# Y4 w1 h+ H: v
4.3.3decltype推导四规则140
5 L" ^) R2 @1 x1 a& V
4.3.4cv限制符的继承与冗余的符号143
* D+ g/ e H$ o) i7 B
4.4追踪返回类型145
7 J0 d' N5 Y8 @: m& B+ G
4.4.1追踪返回类型的引入145
* f8 Y, f8 q" }1 M- z9 n
4.4.2使用追踪返回类型的函数146
* x& S. Z) `) I4 Y8 P, D* x6 j, x
4.5基于范围的for循环150
; ]7 L* {# i' m, G+ I9 C
4.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! u
5.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 z
5.2.2C++11的智能指针164
4 D, _8 r( ?3 M0 \6 c6 t7 Z, F& a0 J
5.2.3垃圾回收的分类167
$ \( f% z/ L2 z0 ~& c
5.2.4C++与垃圾回收169
9 N- |# M) S, e& @
5.2.5C++11与最小垃圾回收支持170
2 V5 N) p; ^# i7 J' f+ _2 }
5.2.6垃圾回收的兼容性172
4 ^% h1 n2 Q5 h1 C* c
5.3本章小结173
# ~) s5 _9 s t, n0 [
第6章提高性能及操作硬件的能力174
8 G n2 K( H9 j) s# ?
6.1常量表达式174
1 Z5 s; S+ l) U G, J u3 N
6.1.1运行时常量性与编译时常量性174
* g) ~, l! J! G7 I' y# ]# v/ ~+ a
6.1.2常量表达式函数176
( g3 `3 t, o {' m- k- j% B
6.1.3常量表达式值178
8 C' B% x8 O7 N, Z
6.1.4常量表达式的其他应用180
9 ]; n- {/ n; X9 D* h, o
6.2变长模板183
2 ?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' s
6.3.1并行编程、多线程与C++11196
1 ?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 T
6.4线程局部存储214
5 z6 j3 G0 U9 N% B
6.5快速退出:quick_exit与at_quick_exit216
+ \& ~+ R9 y$ a! t
6.6本章小结219
$ C3 H! z8 ]. t9 A# g
第7章为改变思考方式而改变220
! z* s3 R: H" W& L
7.1指针空值—nullptr220
8 V* f! n0 q& p% N0 z
7.1.1指针空值:从0到NULL,再到nullptr220
& l# ], O3 A ?, O
7.1.2nullptr和nullptr_t223
2 Y8 L( R! G3 I- n- Y# ]
7.1.3一些关于nullptr规则的讨论225
3 h, Q" w r" ]
7.2默认函数的控制227
. t' K* Q6 C6 i1 G
7.2.1类与默认函数227
4 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% N
7.3.1lambda的一些历史234
. v" c# l' \# c' ?: _
7.3.2C++11中的lambda函数235
' J% ^( p* Y7 G% S$ s. h' x* {
7.3.3lambda与仿函数238
0 H) C5 H. z _. r! D
7.3.4lambda的基础使用240
5 D, p6 n' S* f$ v6 S9 B
7.3.5关于lambda的一些问题及有趣的实验243
5 S; U" T; U3 N2 V2 Z# u0 b; ?
7.3.6lambda与STL247
, T# r! g$ t; W$ f4 O
7.3.7更多的一些关于lambda的讨论254
7 ?# 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; H
8.3Unicode支持274
) ?5 ?3 U+ ] Z7 u# c9 T5 e0 `3 \
8.3.1字符集、编码和Unicode274
5 ~1 {+ Y' T" v! i. R
8.3.2C++11中的Unicode支持276
8 G6 s- E. F* ], l
8.3.3关于Unicode的库支持280
2 L6 B! i/ Z* Q0 Y9 Q4 @
8.4原生字符串字面量284
' t( n. _( j5 y( e, @) @& v
8.5本章小结286
3 Y2 w9 ?6 m9 \( |
附录AC++11对其他标准的不兼容项目287
2 u9 J* b' Q3 i( Y7 D, |( V
附录B弃用的特性294
8 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
2014-7-25 10:24 上传
下载附件
(101.86 KB)
) ~& a3 ?1 @/ h8 o0 m% r
5 |/ N. b5 Z9 ?0 e! @% Z& }, l5 T
截图
+ N5 w' h; K$ p) z& ~/ e
2014-7-25 10:25 上传
下载附件
(301.62 KB)
/ 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