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