数学建模社区-数学中国
标题:
深入理解C++11:C++11新特性解析与应用
[打印本页]
作者:
数学中国—罂粟
时间:
2014-7-25 10:30
标题:
深入理解C++11:C++11新特性解析与应用
本帖最后由 数学中国—罂粟 于 2014-7-25 10:31 编辑
7 E! j2 ?+ a' ]" z5 W0 g% Y$ t6 ~
. ]! H+ {% K8 W$ d# H2 P5 u
内容简介
, ^* \$ K: _- ]7 N8 {; I) p4 G
《
深入理解C++11:C++11新特性解析与应用
》内容简介:国内首本全面深入解读C++11新标准的专著,由C++标准委员会代表和IBM XL编译器中国开发团队共同撰写。不仅详细阐述了C++11标准的设计原则,而且系统地讲解了C++11新标准中的所有新
语言
特性、新标准库特性、对原有特性的改进,以及如何应用所有这些新特性。
- y* a% X. x8 z8 F& I+ T6 ?% s
《
深入理解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的相关资源。
" I% c4 M3 @- n8 j$ x% @1 L5 m
& Q3 M1 f0 Y: z6 l% [) \
编辑推荐
8 t0 q" \! z2 J$ u* n8 y/ ?
《
深入理解C++11:C++11新特性解析与应用
》编辑推荐:C++标准委员会成员和IBM XL编译器中国开发团队共同撰写,权威性毋庸置疑。系统、深入、详尽地讲解了C++11新标准中的新语言特性、新标准库特性、对原有特性的改进,以及所有这些新特性的应用。
# }3 ?4 Z& k/ {! @- I0 Z. \7 o
1 x$ @" L& B& j p! W* J" I- S. }
作者简介
/ y8 j: ]: G/ n4 |
作者:(加拿大)Michael Wong IBM XL编译器中国开发团队
7 u% y% _6 V& v: f
. `6 x, Y6 X% d+ A Z. b
Michael Wong,C++11标准委员会(WG21)委员,WG21加拿大代表团团长及IBM公司代表(投票人),WG21 SG5(transactional Memory study group)学习小组组长。除此之外,Michael还是OpenMP委员会的CEO,SCC(Standards Council of Canada)的副主席。
# C& n. a( Q& L, k$ ?
Michael是多个C++11/OpenMP/STM新特性的合作编写者,活跃于各种技术会议,而且为Programming Committee of Boost以及IWOMP等国际会议服务。Michael也是IBM公司的高级技术专家,领导IBM XL C++编译器、XL C编译器的开发工作,当前致力于IBM编译器的C++11新特性部署。Michael在并行编程、C++基准
测试
、对象
模型
、泛型编程、
模板
元编程等多个技术领域均有涉猎,并且在对象模型以及事务内存等方面取得过多个专利。
7 W _5 f. r* X c
早年Michael于多伦多大学获取得了天体物理学的学士学位,并在滑铁卢大学获得了硕士学位。在加入IBM之前,Michael曾先后供职于大卫?邓禄普天文台(David Dunlap Observatory),CDC公司(Control Data Corporation),BMO Nesbitt Burns公司等。
+ k+ k2 c& t# S& N4 p @( G8 O E1 ]
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新特性的开发工作。
! s% F, h. z% i
2 t J* A+ \' r+ c$ e1 w
目录
免责声明
1 c0 h0 |8 R$ J
序
/ w; {' ^: p) m5 d7 @) i6 Z
前言
5 Y9 O; T/ \; N, t8 w7 M! H
第1章新标准的诞生1
]4 A6 T; x) B
1.1曙光:C++11标准的诞生1
3 [/ q+ I- C `) p3 f
1.1.1C++11/C++0x(以及C11/C1x)——新标准诞生1
- Y- Z3 C1 o: v, f! G \% d
1.1.2什么是C++11/C++0x2
% M2 ^' _9 w0 U# I1 S% V
1.1.3新C++语言的设计目标3
2 w3 o b* C6 B1 M5 d: U
1.2今时今日的C++5
4 R/ n% R2 |( [: b4 g' m7 f
1.2.1C++的江湖地位5
, s) f1 d, _8 O7 K
1.2.2C++11语言变化的领域5
; p* Y. Z9 I3 N5 T/ n: d. C
1.3C++11特性的分类7
9 k$ E ^8 j# P, y8 Y+ L
1.4C++特性一览11
" I4 K$ n4 i: f. m
1.4.1稳定性与兼容性之间的抉择11
/ c! b' p2 N1 z3 |- Z( t
1.4.2更倾向于使用库而不是扩展语言来实现特性12
/ x, L9 E- W. L* v5 c' F2 w
1.4.3更倾向于通用的而不是特殊的手段来实现特性13
5 R, T3 E( n* N; u: B- i
1.4.4专家新手一概支持13
5 e* ^, E6 r- q6 ~+ E8 O- R0 g
1.4.5增强类型的安全性14
- g1 E& o" Z6 Q3 a. [7 C( y: M7 I
1.4.6与硬件紧密合作14
) D- `& d0 j! W; s
1.4.7开发能够改变人们思维方式的特性15
* J5 w. {0 p; g- H
1.4.8融入编程现实16
; j: B8 E' h5 R# ~. s
1.5本书的约定17
5 H* L& _. R" ^1 {3 n& J9 i
1.5.1关于一些术语的翻译17
) X; ` k# s k, b H
1.5.2关于代码中的注释17
$ p; A0 M3 d9 c3 S6 J* z, y3 V7 O; T
1.5.3关于本书中的代码示例与实验平台18
) d! ^3 X' c/ @
第2章保证稳定性和兼容性19
( u! g$ k5 l; M1 x8 b3 M
2.1保持与C99兼容19
9 H. w3 p0 q" k1 y
2.1.1预定义宏19
# \ x+ d0 Y5 a$ ?/ h: a
2.1.2_func_预定义标识符20
6 l3 S# w) m: l9 z" x, x
2.1.3_Pragma操作符22
; u) Q5 V$ A |, w& L/ M( l7 D0 @2 A+ D
2.1.4变长参数的宏定义以及_VA_ARGS_22
! c- B) l+ E5 k, }' c. |
2.1.5宽窄字符串的连接23
' {5 ?/ y4 d1 ~
2.2longlong整型23
- a. ]7 M* l% ^+ T8 ~" Y
2.3扩展的整型25
$ o9 K& v u( }4 J* b' m
2.4宏_cplusplus26
- I2 H" | |: v! @: O
2.5静态断言27
6 d/ g+ X" p( s- V; Y1 W
2.5.1断言:运行时与预处理时27
5 t! {7 U \" @
2.5.2静态断言与static_assert28
8 O2 R" R ^. I5 R1 C9 ^ y
2.6noexcept修饰符与noexcept操作符32
( L, \9 I3 K+ P/ J! Y
2.7快速初始化成员变量36
: k2 x+ {& i. \5 J$ R/ n
2.8非静态成员的sizeof39
: w: u ~9 K* `. Y9 D
2.9扩展的friend语法40
8 @9 H8 _0 N/ W7 G0 i4 u7 z; J
2.10final/override控制44
4 x* I/ T. U6 _" t$ G6 c" H+ i
2.11模板函数的默认模板参数48
0 {. T1 i. a4 r5 |- m; U
2.12外部模板50
4 Q. d+ i" v, ]9 u
2.12.1为什么需要外部模板50
: `" b9 e8 x9 \. `' W
2.12.2显式的实例化与外部模板的声明52
3 L$ K% ~. k5 V' \
2.13局部和匿名类型作模板实参54
9 r" Z. K F& x n& J9 ^
2.14本章小结55
, r/ x: P3 g f7 x
第3章通用为本,专用为末57
' x ^* p7 s' J" x
3.1继承构造函数57
# `, {& I6 E0 Y6 T+ ~ s' C
3.2委派构造函数62
8 [/ w( r* I7 A" M; x
3.3右值引用:移动语义和完美转发68
4 Y. E$ r4 ]8 e; h9 A3 d
3.3.1指针成员与拷贝构造68
& ~1 u! Z( s1 J& @- O7 G
3.3.2移动语义69
4 P9 K3 _' D% y- N+ D- K3 v
3.3.3左值、右值与右值引用75
( { c p1 |9 i5 W4 j! I9 p( ~
3.3.4std:move:强制转化为右值80
' j" c3 U, ~ L. U+ N2 X
3.3.5移动语义的一些其他问题82
8 e2 n- E1 ^7 J
3.3.6完美转发85
6 F# A; y6 P+ K# K
3.4显式转换操作符89
/ y# L* |2 R$ w. C4 r, ^# A+ c& G* K
3.5列表初始化92
$ G9 i( x0 r0 J, E7 h8 q8 A
3.5.1初始化列表92
9 |2 _0 r) { R. A9 e; v# c7 h* q: D
3.5.2防止类型收窄96
% f; T; e2 b- d4 ^4 G8 `/ u
3.6POD类型98
/ Q! J. R5 L3 ]! z( P, G
3.7非受限联合体106
2 k# b( e1 R) C
3.8用户自定义字面量110
. \3 c" c. J- b; B7 V& w! d
3.9内联名字空间113
# O6 ?8 d/ g0 e8 V& P
3.10模板的别名118
- V9 n; S- t2 M" g
3.11一般化的SFINEA规则119
9 o0 A7 \% a0 j, _( d
3.12本章小结121
# _# J, l; q0 P7 t% j- K, P* W$ H# ~; a# x
第4章新手易学,老兵易用123
& G4 ]3 H% v0 }0 M
4.1右尖括号>的改进123
2 H- ~) h9 t! ]9 W f) K0 T
4.2auto类型推导124
7 p5 \, T6 G; c! L$ H( R
4.2.1静态类型、动态类型与类型推导124
0 [4 T4 m+ a+ H* K+ z4 I
4.2.2auto的优势126
8 r1 r( y2 v! ^2 r. ?
4.2.3auto的使用细则130
7 G7 w d. m1 a1 H1 n+ D
4.3decltype134
, z, H, |/ X: g& f. w( a" }
4.3.1typeid与decltype134
- X+ W; ?. x, o( K. g
4.3.2decltype的应用136
0 F. n' |* \8 i G' Z4 p
4.3.3decltype推导四规则140
+ g, E" `2 B x% ~- G
4.3.4cv限制符的继承与冗余的符号143
& l8 J8 e" I5 [: T9 f3 {' {
4.4追踪返回类型145
, v. z2 z" S4 b3 h1 |! f5 G' w
4.4.1追踪返回类型的引入145
; P a" j. Y, Z7 m. ~
4.4.2使用追踪返回类型的函数146
* ~! R \$ V4 ?5 p: K
4.5基于范围的for循环150
# T7 e) v: ~7 L5 o9 _/ I
4.6本章小结153
0 |8 C _; Q( p9 v
第5章提高类型安全155
# v3 H+ w0 i9 d2 M7 n
5.1强类型枚举155
6 y8 y/ D. o E
5.1.1枚举:分门别类与数值的名字155
7 N* S& @- m( `; |7 G/ |$ B* l1 [
5.1.2有缺陷的枚举类型156
- i9 w; e6 R* f
5.1.3强类型枚举以及C++11对原有枚举类型的扩展160
7 X- p( l/ S) j$ @" a& T
5.2堆内存管理:智能指针与垃圾回收163
; ~& k9 ^- T3 |! q4 s- O# x
5.2.1显式内存管理163
% G$ ? w. ?2 g& E
5.2.2C++11的智能指针164
2 C8 G, X8 ]; C7 I/ j5 H# J [5 o' l
5.2.3垃圾回收的分类167
- c! N' ?2 b- g
5.2.4C++与垃圾回收169
5 T6 v+ q/ r; C3 ^- O# h
5.2.5C++11与最小垃圾回收支持170
3 D0 J1 ]' ]( E/ u) p
5.2.6垃圾回收的兼容性172
& Y, e6 h5 o: p. T1 Z$ P6 b$ g
5.3本章小结173
) t2 n8 }* F+ m0 W
第6章提高性能及操作硬件的能力174
& _9 N" c {; B2 `! s
6.1常量表达式174
) E1 W* X5 Z5 s. b1 l
6.1.1运行时常量性与编译时常量性174
$ R8 w! j' v* H7 k, l
6.1.2常量表达式函数176
5 F# Y3 W% G8 v- _: [
6.1.3常量表达式值178
4 a: i2 H) U* I
6.1.4常量表达式的其他应用180
+ K7 s* k1 y; `
6.2变长模板183
! y3 A: S- o( l, ?/ E2 |0 u6 n
6.2.1变长函数和变长的模板参数183
' @# T! O6 b# r4 _6 J4 J2 D5 X# |
6.2.2变长模板:模板参数包和函数参数包185
! u( V: C$ X) C" B2 T: C
6.2.3变长模板:进阶189
. y6 z4 u; t! R& O; i9 L
6.3原子类型与原子操作196
+ f9 D0 C0 P& S7 z9 Q9 w4 T
6.3.1并行编程、多线程与C++11196
* K/ e) z6 P$ ^$ h# ?- X7 |3 R
6.3.2原子操作与C++11原子类型197
' `. q y+ Z1 |3 ~7 k$ l! n$ F
6.3.3内存模型,顺序一致性与memory_order203
6 Q- ^5 M/ o' Z
6.4线程局部存储214
0 Q3 c' `$ G4 P! V6 i5 r
6.5快速退出:quick_exit与at_quick_exit216
' ]8 |9 R' r$ V0 x- _
6.6本章小结219
9 k& r& r( S+ d- L
第7章为改变思考方式而改变220
' x* v# ~5 Y+ F2 r9 X
7.1指针空值—nullptr220
# T _8 L4 M( J1 u4 l
7.1.1指针空值:从0到NULL,再到nullptr220
$ \0 E4 Q0 {% X! g" \1 d8 o N
7.1.2nullptr和nullptr_t223
0 N& ]$ N# N; d8 M2 u6 E; s
7.1.3一些关于nullptr规则的讨论225
1 v' b& t1 E' }* O( e0 [) r
7.2默认函数的控制227
, r4 b( `/ u8 C$ F4 H/ N0 o
7.2.1类与默认函数227
8 n, w9 V* t# s( }% h8 Y: @
7.2.2“=default”与“=deleted”230
. f) a* H! M- S e( J
7.3lambda函数234
% i) l& B$ N4 n+ A
7.3.1lambda的一些历史234
- W% s8 @$ Q f$ X" w: w
7.3.2C++11中的lambda函数235
6 d, I0 _5 ?5 e8 Y5 Y l# Z$ f2 v- v
7.3.3lambda与仿函数238
! z3 \2 ~, Q5 s" e
7.3.4lambda的基础使用240
8 X/ Z$ ^) W7 ^3 z" ?
7.3.5关于lambda的一些问题及有趣的实验243
7 v D) r& ?1 r b( G: ]4 {2 v
7.3.6lambda与STL247
( ]! H: ~. }& _5 M2 C- _
7.3.7更多的一些关于lambda的讨论254
$ ~& H; {% {9 U- }
7.4本章小结256
1 k9 X# ]. V/ k8 }& s3 ~6 ?
第8章融入实际应用258
K9 D; I) C7 `6 P2 z: e1 }
8.1对齐支持258
! V0 s+ f3 F) e6 Y* H5 g
8.1.1数据对齐258
7 Y" M- D* \3 E
8.1.2C++11的alignof和alignas261
. y7 K# d! o" s6 C+ C0 N' A ?
8.2通用属性267
/ Z6 b: o# F) q( b+ w" w" t; r2 L8 {
8.2.1语言扩展到通用属性267
7 |: ], {! w9 B: S7 L- r
8.2.2C++11的通用属性268
9 Q5 e* h4 {/ P8 C2 U
8.2.3预定义的通用属性270
4 s) N8 }* R5 X G# \( y( D
8.3Unicode支持274
1 r9 q& e. p3 A4 p; B' [
8.3.1字符集、编码和Unicode274
9 i0 k% T2 K* e; I3 {4 y1 ?- S
8.3.2C++11中的Unicode支持276
! U' [: e L# K" `+ p1 Y; a
8.3.3关于Unicode的库支持280
. e7 }9 G. b7 u2 u, k5 ~- V
8.4原生字符串字面量284
1 T! ` Q* H1 K0 g5 m
8.5本章小结286
) _! h, Z5 T" B& t8 S9 J/ O
附录AC++11对其他标准的不兼容项目287
* N$ I; c, D2 l |& V1 [4 R
附录B弃用的特性294
2 t% R. Q4 ^; D" I/ W' {
附录C编译器支持301
9 A% `6 h1 }( X+ s3 {4 I! m
附录D相关资源304
% B+ r: W5 N$ F1 i& Q6 i. P% n
; P) z. z, q' W
+ ^0 j& G \9 L5 }8 K9 G* B
封面
4 @) I [0 l* R9 D0 M9 v3 f
2014-7-25 10:24 上传
下载附件
(101.86 KB)
8 y# I S. x' ` h: A
% l2 O( W6 f6 d4 Y$ ^5 X
截图
7 K, {- k& N% t3 a8 [3 D* t6 H4 N
2014-7-25 10:25 上传
下载附件
(301.62 KB)
8 a( o* B, `+ \ x. V
# C! K0 O$ I( I/ e% R" d2 [% J. `6 b6 u
' ~& j, d$ a k3 g( G' d
9 R+ E: u7 Z6 y& R) h
作者:
叶小伦
时间:
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$ j; S; m/ a+ s5 V
作者:
gancm
时间:
2015-1-6 17:17
看看。。。。。。。。。
" g5 }0 ?, W* a4 l3 ]0 L) ]
作者:
慢跑20
时间:
2015-1-21 12:03
不错,长盛不衰的语言
( ]* [( [3 ~- ?3 a2 v. C
作者:
zszzsz111
时间:
2015-2-1 22:25
不错的,谢谢楼主分享~
7 K3 c; m/ |3 F1 u4 v1 x
作者:
jiangtai
时间:
2015-2-3 14:11
挺不错的,支持一下
0 q, u2 y/ a4 U# j4 w
作者:
jiay
时间:
2015-2-3 14:30
good..............
* N$ w; l* e: W: h! A7 h
作者:
LYJA
时间:
2016-9-4 13:04
It is so good,thank you very much!
4 ~% ^9 _/ s* p6 O1 b V
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5