数学建模社区-数学中国
标题:
深入理解C++11:C++11新特性解析与应用
[打印本页]
作者:
数学中国—罂粟
时间:
2014-7-25 10:30
标题:
深入理解C++11:C++11新特性解析与应用
本帖最后由 数学中国—罂粟 于 2014-7-25 10:31 编辑
, o% R/ J1 Z, E2 b& L2 R. N l
1 A$ q/ A1 f7 w( J7 }2 u3 z# w
内容简介
' e0 O: B) {- @/ O. U
《
深入理解C++11:C++11新特性解析与应用
》内容简介:国内首本全面深入解读C++11新标准的专著,由C++标准委员会代表和IBM XL编译器中国开发团队共同撰写。不仅详细阐述了C++11标准的设计原则,而且系统地讲解了C++11新标准中的所有新
语言
特性、新标准库特性、对原有特性的改进,以及如何应用所有这些新特性。
' ? Q7 b9 w! \0 `. C- M
《
深入理解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 N- I- S" x: U/ d" v
2 V! \# J1 W$ M- P+ S; {0 c% `
编辑推荐
# r) Y/ ]+ C, j" |, ?( f3 b5 F3 X* w
《
深入理解C++11:C++11新特性解析与应用
》编辑推荐:C++标准委员会成员和IBM XL编译器中国开发团队共同撰写,权威性毋庸置疑。系统、深入、详尽地讲解了C++11新标准中的新语言特性、新标准库特性、对原有特性的改进,以及所有这些新特性的应用。
7 x6 s, v1 g9 b ?) i; V, k4 f
* N* Y. e A8 Q! @
作者简介
" K2 }1 f4 ^& h; h. o
作者:(加拿大)Michael Wong IBM XL编译器中国开发团队
* B) e, u0 [5 E- p+ _+ s
1 K5 B" t }7 t) ?4 u
Michael Wong,C++11标准委员会(WG21)委员,WG21加拿大代表团团长及IBM公司代表(投票人),WG21 SG5(transactional Memory study group)学习小组组长。除此之外,Michael还是OpenMP委员会的CEO,SCC(Standards Council of Canada)的副主席。
# i) r! Y- M# x5 R. `
Michael是多个C++11/OpenMP/STM新特性的合作编写者,活跃于各种技术会议,而且为Programming Committee of Boost以及IWOMP等国际会议服务。Michael也是IBM公司的高级技术专家,领导IBM XL C++编译器、XL C编译器的开发工作,当前致力于IBM编译器的C++11新特性部署。Michael在并行编程、C++基准
测试
、对象
模型
、泛型编程、
模板
元编程等多个技术领域均有涉猎,并且在对象模型以及事务内存等方面取得过多个专利。
% w# H* T$ T8 D: R) {
早年Michael于多伦多大学获取得了天体物理学的学士学位,并在滑铁卢大学获得了硕士学位。在加入IBM之前,Michael曾先后供职于大卫?邓禄普天文台(David Dunlap Observatory),CDC公司(Control Data Corporation),BMO Nesbitt Burns公司等。
: h$ G4 z1 r: `
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新特性的开发工作。
0 W# X0 Q( X/ y( S7 A+ n1 q
* ~8 X; G4 ]* r" v" e4 Q
目录
免责声明
- L- f) {5 r, ^
序
% e; B# @ Y' E8 J# W! e/ g
前言
: N& T4 c6 K; }9 C9 J! f
第1章新标准的诞生1
8 |( ?2 }' [' E: }0 N
1.1曙光:C++11标准的诞生1
* a2 X8 s, j0 E% |5 Y/ {
1.1.1C++11/C++0x(以及C11/C1x)——新标准诞生1
7 Y3 p k5 j' R) n7 @
1.1.2什么是C++11/C++0x2
8 o" @7 y( t5 A3 |) e9 \: |
1.1.3新C++语言的设计目标3
4 c6 X$ f0 w; K5 d5 }2 N8 w& B5 B
1.2今时今日的C++5
! P2 G2 Q6 ~. k+ L+ I" w
1.2.1C++的江湖地位5
5 ? i% K4 ^" N4 p: X7 D z
1.2.2C++11语言变化的领域5
! |' e* c% }6 M; B! O+ W
1.3C++11特性的分类7
4 `7 b/ g7 q! j
1.4C++特性一览11
) ? V* n6 ?% n
1.4.1稳定性与兼容性之间的抉择11
/ {1 `# R% K0 r. F! N$ U
1.4.2更倾向于使用库而不是扩展语言来实现特性12
7 m0 O1 d$ ?: |- Z( ~
1.4.3更倾向于通用的而不是特殊的手段来实现特性13
, ^5 W( ~3 {$ ]* ^7 w8 l# n' T
1.4.4专家新手一概支持13
, P _( l& t4 c
1.4.5增强类型的安全性14
+ `; f1 D, H1 ~+ M
1.4.6与硬件紧密合作14
$ \; Q2 W) Y- {% d% x+ g7 m
1.4.7开发能够改变人们思维方式的特性15
/ d+ V+ e, O3 e( p% {& G9 N
1.4.8融入编程现实16
, V6 e5 n, I3 b# O
1.5本书的约定17
, g: x! _% \* c& i, K
1.5.1关于一些术语的翻译17
- Q( O+ l- z/ C) P. o
1.5.2关于代码中的注释17
/ Z' |* ^4 D% V- b' N5 C
1.5.3关于本书中的代码示例与实验平台18
) c3 n% I+ ]" t5 Q
第2章保证稳定性和兼容性19
8 a0 M/ U4 y; H
2.1保持与C99兼容19
% z. z% {% E* Z' t( L7 M/ m
2.1.1预定义宏19
4 m" ]% S% q& B3 W1 W( {/ \
2.1.2_func_预定义标识符20
$ n8 |) F$ ~/ C
2.1.3_Pragma操作符22
6 }* E( E5 r7 S/ m& v: Q
2.1.4变长参数的宏定义以及_VA_ARGS_22
7 _4 N2 M5 q7 e* o( e% P
2.1.5宽窄字符串的连接23
3 A2 u2 f2 P1 Y0 |5 r* `
2.2longlong整型23
1 M( B" u1 Y6 c. Q- Q- S- v
2.3扩展的整型25
0 T2 o5 ]- ]& e- t' @
2.4宏_cplusplus26
6 q3 H, y1 W2 V
2.5静态断言27
4 f: y5 K! r2 F6 H: g0 `
2.5.1断言:运行时与预处理时27
( O3 L6 f4 v+ ^8 }8 X
2.5.2静态断言与static_assert28
. q7 Q- @( \8 L1 r$ S+ W8 v# B
2.6noexcept修饰符与noexcept操作符32
. d( R( F J6 E1 W! g# Y9 K
2.7快速初始化成员变量36
8 o$ Z6 t4 z0 L1 O/ ?- s4 m
2.8非静态成员的sizeof39
3 p) Z7 b/ i: K1 A5 M4 D
2.9扩展的friend语法40
9 a, t7 d1 `$ h" N
2.10final/override控制44
V; P# `& y: S1 L, D9 U# j
2.11模板函数的默认模板参数48
6 `; T; q( b- U" ~: G# o- m
2.12外部模板50
. [; d5 H3 ], } J* y, D/ ?# H( p
2.12.1为什么需要外部模板50
( ?5 E: e: H3 k; Y3 \2 Q* t
2.12.2显式的实例化与外部模板的声明52
7 B( Y- A' w, B, v. T A" r+ E1 B
2.13局部和匿名类型作模板实参54
5 b3 L% D% Y6 I" f
2.14本章小结55
+ y5 m) O8 R8 i( Y: a+ w
第3章通用为本,专用为末57
2 C7 Z- q+ N0 C" @
3.1继承构造函数57
1 A* ~5 h4 c \+ T
3.2委派构造函数62
* b4 d; Y; V7 u7 o! M9 h
3.3右值引用:移动语义和完美转发68
) t# f5 ]2 W8 L9 Z- ^ y5 S+ K3 |+ z
3.3.1指针成员与拷贝构造68
/ H$ E7 |) }" N3 t
3.3.2移动语义69
. D3 `: S( r- m T, ~8 e
3.3.3左值、右值与右值引用75
3 n8 C! s0 `, r4 l
3.3.4std:move:强制转化为右值80
7 H, R$ [' N/ G5 \* h) ]
3.3.5移动语义的一些其他问题82
. y0 w$ v1 O% w0 ?
3.3.6完美转发85
. i/ {' h- _4 M5 X4 |+ L" G; Z+ p
3.4显式转换操作符89
p9 l: O. i$ S* a4 W, v) I
3.5列表初始化92
8 T/ K! _* l/ Q( Y
3.5.1初始化列表92
% q8 ^3 e# w# v
3.5.2防止类型收窄96
- W" k1 i3 K) B7 J8 z
3.6POD类型98
+ f; U# K) W& d& }- Q
3.7非受限联合体106
& J+ Q8 v: r/ I' f7 }
3.8用户自定义字面量110
: S4 w0 Y5 n N8 j
3.9内联名字空间113
& |, E1 V. Q1 p- }' B
3.10模板的别名118
1 ?3 w" M6 v4 m# f( T
3.11一般化的SFINEA规则119
7 B5 b% n! q6 R) S4 u$ @
3.12本章小结121
! ^' Y8 p0 \! i
第4章新手易学,老兵易用123
$ `3 R2 S/ C$ x3 k$ X3 a g# m
4.1右尖括号>的改进123
3 |. Q2 P4 b5 p0 z
4.2auto类型推导124
- |6 c% F" Y) R# d# n' ~# N* U: k
4.2.1静态类型、动态类型与类型推导124
8 X3 W. _2 T$ q* X
4.2.2auto的优势126
3 C9 X2 e6 c5 H4 X: e& H2 N
4.2.3auto的使用细则130
# r0 Q6 ]5 b$ y3 [% j4 m
4.3decltype134
' U* Q6 q6 [- K1 N
4.3.1typeid与decltype134
4 E" z8 n. L, c4 y h: c- t& F: c
4.3.2decltype的应用136
, L- q! P3 H/ T6 O8 F4 |
4.3.3decltype推导四规则140
& U8 l! T2 s& M4 k+ T
4.3.4cv限制符的继承与冗余的符号143
' O# a1 q) A. C: A3 @* P
4.4追踪返回类型145
/ A1 D0 K# S3 Y: m8 p3 b" [9 f
4.4.1追踪返回类型的引入145
1 H! \0 E: I9 O+ D
4.4.2使用追踪返回类型的函数146
$ M( r+ O* u2 S1 D
4.5基于范围的for循环150
5 R& e6 @( L; w2 j9 M& Q9 m
4.6本章小结153
6 d" W) e& ^* [% |9 |( Z. y
第5章提高类型安全155
" u: z5 L6 N+ Q
5.1强类型枚举155
# n& P' q$ f0 U* j
5.1.1枚举:分门别类与数值的名字155
0 S3 f4 ^! Z% _$ b: s5 S, t# Z
5.1.2有缺陷的枚举类型156
( I! B' H) f1 Z
5.1.3强类型枚举以及C++11对原有枚举类型的扩展160
8 h' G% ^+ {1 b
5.2堆内存管理:智能指针与垃圾回收163
3 K/ h% Y8 I: l+ t1 H1 }4 [# G' d
5.2.1显式内存管理163
4 y+ t! p- H( S# ]! |
5.2.2C++11的智能指针164
& L+ T6 M( Q# Y6 a. c3 T8 K
5.2.3垃圾回收的分类167
$ E9 u- d2 u5 e+ E
5.2.4C++与垃圾回收169
1 Y- u, o; y3 E2 x3 h0 K7 Z9 n
5.2.5C++11与最小垃圾回收支持170
, P9 n, l8 P# m" L4 G
5.2.6垃圾回收的兼容性172
: I- J8 l8 S! Q1 I; Z) J y5 H9 t
5.3本章小结173
' C% w5 z& a1 O8 f; I
第6章提高性能及操作硬件的能力174
. |9 ?& Q. {6 n+ h" \2 G) k) N& ~
6.1常量表达式174
/ `& \5 @$ b- \/ W$ y
6.1.1运行时常量性与编译时常量性174
. o4 ?1 P, u I9 W0 Q! p0 E
6.1.2常量表达式函数176
9 U! z% `, t1 ]
6.1.3常量表达式值178
2 F. ?4 S: d8 o2 `
6.1.4常量表达式的其他应用180
5 D8 W4 n+ u0 }$ l% _4 I: X
6.2变长模板183
% R/ a1 }$ N8 a* P" Q# r4 e) Z. f9 z* _
6.2.1变长函数和变长的模板参数183
5 b) T/ w5 E( w Q
6.2.2变长模板:模板参数包和函数参数包185
" T* c- C6 _1 N, [! C& F3 R0 O
6.2.3变长模板:进阶189
4 v+ M# C: B4 E: O0 A. w
6.3原子类型与原子操作196
& z, [4 |# @! u) _* [
6.3.1并行编程、多线程与C++11196
- i7 E- P. L! y7 |
6.3.2原子操作与C++11原子类型197
8 p7 f* P7 g# F2 d6 ~0 i$ c: I
6.3.3内存模型,顺序一致性与memory_order203
4 |9 U3 x0 ?; \
6.4线程局部存储214
1 K# v- U' e5 x
6.5快速退出:quick_exit与at_quick_exit216
9 \+ v# u! i) |
6.6本章小结219
, `7 T% u9 p/ w1 w
第7章为改变思考方式而改变220
+ C% T6 M# I H, h3 u& W
7.1指针空值—nullptr220
0 i/ \* I9 S* n; Q
7.1.1指针空值:从0到NULL,再到nullptr220
4 i: \0 b( l) ~! L; u# h4 f- ~
7.1.2nullptr和nullptr_t223
, X8 u% |8 ?7 |$ Y/ ]6 J
7.1.3一些关于nullptr规则的讨论225
! v6 }3 w& u9 Y% f* j, x' G6 E
7.2默认函数的控制227
! d5 ?( j& Z4 G5 j
7.2.1类与默认函数227
) A& j, A0 T7 V" }7 K
7.2.2“=default”与“=deleted”230
8 ?3 T7 r. Z7 F
7.3lambda函数234
$ p2 G$ p4 w- ]! q: A
7.3.1lambda的一些历史234
7 y& H! { @! G' x' C' B
7.3.2C++11中的lambda函数235
% G" v% T% H( Y# I( e
7.3.3lambda与仿函数238
7 \' D3 e( o5 Y4 {/ W5 L
7.3.4lambda的基础使用240
) g# S- L- v$ ?$ X; W ^( v+ H
7.3.5关于lambda的一些问题及有趣的实验243
; A' | | {& W
7.3.6lambda与STL247
) o3 }- C3 X- h: a0 ^. R
7.3.7更多的一些关于lambda的讨论254
/ T# Z- X/ A( y K" h7 H" A
7.4本章小结256
2 ]# L- Z6 ]; Q' g8 Q8 C
第8章融入实际应用258
0 ~8 [+ z6 |9 ?& J# s- j# l
8.1对齐支持258
* M. v2 L+ n2 F/ g2 j/ E) t X
8.1.1数据对齐258
* L, G$ ~% u7 t: o" `* ?
8.1.2C++11的alignof和alignas261
0 i, v( x5 N6 ^2 h1 Q, [( v
8.2通用属性267
4 f3 T0 c, H$ B- e
8.2.1语言扩展到通用属性267
# O; Z. j& }1 {& r: t9 @
8.2.2C++11的通用属性268
* K% ?; o- d9 |+ j
8.2.3预定义的通用属性270
& z3 x$ D* O0 F1 k) m7 V1 }' v
8.3Unicode支持274
" S3 Q/ g# ^ C! r2 b: V G0 H
8.3.1字符集、编码和Unicode274
. c6 J; d2 U& B0 C; z# h
8.3.2C++11中的Unicode支持276
: e4 o2 ^+ ?. b; e i; r; B# [
8.3.3关于Unicode的库支持280
( w9 [3 O$ y$ W* f; [
8.4原生字符串字面量284
^" E+ f" o H! L9 Z
8.5本章小结286
G( e( |. y& E* [
附录AC++11对其他标准的不兼容项目287
5 F0 V. |9 Q4 _& r8 E
附录B弃用的特性294
9 t# O# }" l% s% }) R; H
附录C编译器支持301
4 Y G8 W' i# k% F
附录D相关资源304
2 Q* _4 X8 x* ]) R3 v0 @3 m
9 z+ k9 t7 g$ |* K& X( f, ~& q3 I) r
- @& c- `8 x B. F4 S* m# H
封面
: }1 a- U N2 y9 a9 c% l
2014-7-25 10:24 上传
下载附件
(101.86 KB)
+ t [* q: R6 q) ]2 K
, t8 E! P F: _& B
截图
) ]8 T5 j" ~- U0 C* X
2014-7-25 10:25 上传
下载附件
(301.62 KB)
6 g8 m' ]" y( u* F$ T
3 W t! _% I T8 `* r
( a6 ~1 O# P6 ?' h5 {1 |% Y
% t. `$ _1 q+ @/ l' I( D& L
作者:
叶小伦
时间:
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
0 w2 C. l7 N: p X
作者:
gancm
时间:
2015-1-6 17:17
看看。。。。。。。。。
8 S8 o, j3 }+ }4 T- D% }) r, _) v3 y B$ ~
作者:
慢跑20
时间:
2015-1-21 12:03
不错,长盛不衰的语言
, b' X6 U& ?* M
作者:
zszzsz111
时间:
2015-2-1 22:25
不错的,谢谢楼主分享~
0 P$ T% ~7 b; H
作者:
jiangtai
时间:
2015-2-3 14:11
挺不错的,支持一下
8 u" x- d8 Z) y$ ?9 t
作者:
jiay
时间:
2015-2-3 14:30
good..............
4 n- R* O. I9 T1 S9 v
作者:
LYJA
时间:
2016-9-4 13:04
It is so good,thank you very much!
X, A! j, T7 k& m3 f
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5