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