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