数学建模社区-数学中国

标题: 深入理解C++11:C++11新特性解析与应用 [打印本页]

作者: 数学中国—罂粟    时间: 2014-7-25 10:30
标题: 深入理解C++11:C++11新特性解析与应用
本帖最后由 数学中国—罂粟 于 2014-7-25 10:31 编辑 % _0 w. R( M) b

' D/ h. L1 M$ m" g& F3 M内容简介( K4 b1 _$ r3 Z$ s
深入理解C++11:C++11新特性解析与应用》内容简介:国内首本全面深入解读C++11新标准的专著,由C++标准委员会代表和IBM XL编译器中国开发团队共同撰写。不仅详细阐述了C++11标准的设计原则,而且系统地讲解了C++11新标准中的所有新语言特性、新标准库特性、对原有特性的改进,以及如何应用所有这些新特性。
$ t" p5 |" s. T- {5 B; d' o/ _2 d深入理解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的相关资源。5 u5 Z# D% @% a% Z3 B3 Z6 e/ o

0 i! E  C* z3 {( ^) t4 `- W+ ?编辑推荐
( m# p3 H' V- X! b深入理解C++11:C++11新特性解析与应用》编辑推荐:C++标准委员会成员和IBM XL编译器中国开发团队共同撰写,权威性毋庸置疑。系统、深入、详尽地讲解了C++11新标准中的新语言特性、新标准库特性、对原有特性的改进,以及所有这些新特性的应用。' A7 U* r# B) T# I7 g

& a# {2 w- W" e8 r! E1 a; `3 E4 D作者简介
+ z: u  y6 i4 Q$ W: h# q- P1 \作者:(加拿大)Michael Wong IBM XL编译器中国开发团队, r! A$ l1 e3 T. Z# T$ y8 m$ y

1 M( p- p. y& wMichael Wong,C++11标准委员会(WG21)委员,WG21加拿大代表团团长及IBM公司代表(投票人),WG21 SG5(transactional Memory study group)学习小组组长。除此之外,Michael还是OpenMP委员会的CEO,SCC(Standards Council of Canada)的副主席。0 u  M6 e7 x( [
Michael是多个C++11/OpenMP/STM新特性的合作编写者,活跃于各种技术会议,而且为Programming Committee of Boost以及IWOMP等国际会议服务。Michael也是IBM公司的高级技术专家,领导IBM XL C++编译器、XL C编译器的开发工作,当前致力于IBM编译器的C++11新特性部署。Michael在并行编程、C++基准测试、对象模型、泛型编程、模板元编程等多个技术领域均有涉猎,并且在对象模型以及事务内存等方面取得过多个专利。! X( r) I! U5 c( j0 m2 H
早年Michael于多伦多大学获取得了天体物理学的学士学位,并在滑铁卢大学获得了硕士学位。在加入IBM之前,Michael曾先后供职于大卫?邓禄普天文台(David Dunlap Observatory),CDC公司(Control Data Corporation),BMO Nesbitt Burns公司等。
% [2 ~: g; A+ `- `1 jIBM 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 J( t3 z  Z: C5 Q
2 J& N. [, d( [' Y4 q目录免责声明; K; r7 S* |% @- K; a
5 q5 y* ~  y4 Q" o
前言- ]7 I7 u0 S6 _/ l
第1章新标准的诞生1
( s, d6 d( N0 j) G/ o1.1曙光:C++11标准的诞生1
9 P& [  O' g6 s6 B4 b8 d1.1.1C++11/C++0x(以及C11/C1x)——新标准诞生1' H/ g! L8 _2 H7 |
1.1.2什么是C++11/C++0x2& M2 t( p9 x; c
1.1.3新C++语言的设计目标33 p0 Y$ H* T- f( ]
1.2今时今日的C++5
$ d0 W2 }7 H/ n9 E# q& g1.2.1C++的江湖地位5
) Q- }  e- f2 H5 Y) n; |1.2.2C++11语言变化的领域5
$ K+ \, e% c! y% T; m: G6 l1.3C++11特性的分类7
: s# ^3 w! J4 b6 S7 d8 ?' w1.4C++特性一览11. w" k3 x+ h9 Z+ W% m
1.4.1稳定性与兼容性之间的抉择113 c0 |- E% C+ z1 N! p/ P" I
1.4.2更倾向于使用库而不是扩展语言来实现特性12( X  U( ^6 }$ r/ c7 r& O/ l, y
1.4.3更倾向于通用的而不是特殊的手段来实现特性13
4 G4 j! m5 _- `: |* c1.4.4专家新手一概支持13& r. y; t/ @! j5 N
1.4.5增强类型的安全性14
$ L, O' ]+ j" e( A1.4.6与硬件紧密合作141 V1 v2 _7 H; H; R: o6 i* E* J
1.4.7开发能够改变人们思维方式的特性15" Y2 R4 H* ~& ^- N8 o+ {, h
1.4.8融入编程现实163 e. w, U6 U8 X
1.5本书的约定17
. J5 \  _4 Y. r: n1 u$ N1.5.1关于一些术语的翻译17
# e( A8 l2 n! Z' [, Z1.5.2关于代码中的注释177 x1 I/ L2 u# S1 [/ o2 P2 K$ \; @
1.5.3关于本书中的代码示例与实验平台18& w4 L/ t3 @, ^2 v0 Y+ M" n; Y
第2章保证稳定性和兼容性19
' k0 H+ x5 v: C! N. C2.1保持与C99兼容19% s3 M0 @' s4 \/ q. h  z2 U7 w  a
2.1.1预定义宏19
3 X( |, A( L9 ~2 `0 G2 X; G2.1.2_func_预定义标识符202 z' v7 h' s! ~" G: V' W
2.1.3_Pragma操作符22
/ N" i- ~/ i' _) g# F2.1.4变长参数的宏定义以及_VA_ARGS_22
7 P, x% p7 S, J2.1.5宽窄字符串的连接233 j1 V" w! A# c. B6 I
2.2longlong整型23, d! H( G& q4 Q  z* b$ ]
2.3扩展的整型252 q+ j3 y# O* p
2.4宏_cplusplus26
. r& q) R- {2 D- b, s9 y: x2.5静态断言273 h6 \& g' V) P. N
2.5.1断言:运行时与预处理时27$ I! Z8 P# ]* \, k0 P% t6 \/ I% y' l+ A
2.5.2静态断言与static_assert28. g  Q0 T  P8 N" e  G7 n
2.6noexcept修饰符与noexcept操作符32
/ u  T7 A) |  P6 O% c1 F2.7快速初始化成员变量36
: M' y% Q! n1 U* t2 |+ A2.8非静态成员的sizeof39
8 O# Q) a$ B/ z4 R7 t# N2.9扩展的friend语法40  ]6 v2 d+ I" n; l. F) C. b9 V
2.10final/override控制44
/ u% \; \" d' l% {2 y2 e, B4 f2.11模板函数的默认模板参数48' l" I7 a4 ?! h7 g+ a
2.12外部模板50
& `& Q+ K& {! q! V3 T2.12.1为什么需要外部模板50& X2 q# J: a, G. G4 I' }% @
2.12.2显式的实例化与外部模板的声明52# H6 [' u. r/ @
2.13局部和匿名类型作模板实参54
5 N7 `3 ]3 z$ o8 p2.14本章小结55
4 r4 \/ Z/ W- l' Y第3章通用为本,专用为末57
" d0 _% v- D& {3.1继承构造函数57) W2 ?/ [* O- j# t; L' s
3.2委派构造函数62* `9 i  Q, z4 L( z( F; C' ]
3.3右值引用:移动语义和完美转发684 _4 A  ?/ u7 f# f, ?: \" ^
3.3.1指针成员与拷贝构造68
, Q. J2 f8 S# w3.3.2移动语义69
6 h' k$ G( a3 `" w- K' ^3.3.3左值、右值与右值引用75
0 `& H) w2 V& g/ ]7 \3.3.4std:move:强制转化为右值80: q$ P9 r- z5 o
3.3.5移动语义的一些其他问题82
' M4 j% Z$ t0 \/ s7 ]3.3.6完美转发858 o% ?, h/ |& i3 d* \* H# ^1 {, S
3.4显式转换操作符890 B5 R. E6 G3 E5 m& T& [
3.5列表初始化922 y2 i! R% B1 p
3.5.1初始化列表92
( F/ _; v/ c# h# x) X3 {  J5 e3.5.2防止类型收窄96
; u. \: o  f+ V8 w$ ^" g3.6POD类型98
. _3 \" T1 M( A3.7非受限联合体106: d4 s7 w. A: `( B4 R9 H  u
3.8用户自定义字面量110% s; o( L+ e! o! f8 |3 \
3.9内联名字空间113
4 R, k' [, X( \: Y4 ?3.10模板的别名118
' r$ F) R9 X& m' v) ?3.11一般化的SFINEA规则119
( e2 Q' Z6 [( b2 d# ~3.12本章小结121
' k0 e: |9 b$ W. q  Z2 ~6 D3 U第4章新手易学,老兵易用123& A8 `2 v$ C! B/ W0 K, \
4.1右尖括号>的改进123' W3 N& ^( x2 C2 T* g9 G- n3 a
4.2auto类型推导124, P8 j1 O/ x% N) y" K' q) [+ e
4.2.1静态类型、动态类型与类型推导124! @% I: I# b6 k+ i1 @( X3 w6 ]* w
4.2.2auto的优势126. X8 O3 N0 c5 T: i
4.2.3auto的使用细则130
/ b0 |2 }* P. J: e) c* x5 a4.3decltype134
" Y/ e8 o; y# Q# ^4 [  |" R& X4.3.1typeid与decltype134  Z/ Z7 ^" \6 J/ |  ?1 [
4.3.2decltype的应用136
! J' d1 H/ L. P! N" \4.3.3decltype推导四规则140
8 U9 L1 b& M3 B6 e7 u1 H# [, W, [: L4.3.4cv限制符的继承与冗余的符号1437 H4 h. N+ v- A* H9 `
4.4追踪返回类型145
, t. t5 L; g) `2 m3 _4 p; d4.4.1追踪返回类型的引入145; E! r+ \5 W* v% K. Z
4.4.2使用追踪返回类型的函数146
* B) _! B8 e5 v6 |4 p% z4.5基于范围的for循环150
6 E- N; k5 m* Y& v4.6本章小结1533 Q0 W2 O. {- p4 p* }, N- G7 @
第5章提高类型安全155% O1 Y) y% \0 `$ p, M
5.1强类型枚举155, v( T! P1 t% ?
5.1.1枚举:分门别类与数值的名字1550 k8 x1 X. q- y* z  y9 {' e; O
5.1.2有缺陷的枚举类型156
  K9 g' C+ g* v% _" H% I0 B5.1.3强类型枚举以及C++11对原有枚举类型的扩展160
2 t* R6 b5 j/ b" ?5.2堆内存管理:智能指针与垃圾回收163
! {5 \0 h; _, S$ E( ^5.2.1显式内存管理163
7 ^1 M( O. b1 H4 Q5 j- o9 s# o* u5.2.2C++11的智能指针164
- j: a; l' M! [' y" i4 j5.2.3垃圾回收的分类167
  \! ~; k4 t$ K9 G0 s! i5.2.4C++与垃圾回收169
' U2 K2 a$ o  w) N7 S6 J" e  `5.2.5C++11与最小垃圾回收支持1705 l( z( }  b: _" ~# w
5.2.6垃圾回收的兼容性172* T, `( y6 W9 E! n: i
5.3本章小结173
2 t- }6 K4 K) Y0 h- d4 H8 Q! Q) i第6章提高性能及操作硬件的能力174
, [9 S( V7 @+ N+ E6.1常量表达式1741 \, ^. e3 R6 B+ g
6.1.1运行时常量性与编译时常量性174, @5 G" D) ^6 N8 C% k. S9 m. P* k- e
6.1.2常量表达式函数176
! {3 g; X' M/ G9 P% f6.1.3常量表达式值178
2 e; C, Q* |4 ^$ U& e$ N6.1.4常量表达式的其他应用180* @! V* f( N& w8 p& V1 L3 W
6.2变长模板183
$ D- }6 i5 m" {& f+ X+ Y6.2.1变长函数和变长的模板参数183
3 h4 [5 f! \3 y( k$ N5 Y6.2.2变长模板:模板参数包和函数参数包185
' m6 m: ^2 q  B8 D- j, H. Z2 ~! y$ n6.2.3变长模板:进阶189
  A! n( ]1 i' O+ o$ v& _; w: p/ k6.3原子类型与原子操作196
, b  d4 a" [' V6.3.1并行编程、多线程与C++11196# W5 _! c+ `$ ~# J7 z0 L3 d
6.3.2原子操作与C++11原子类型197
2 K. @  ^5 r% h  o5 e! T5 y9 [6.3.3内存模型,顺序一致性与memory_order203
# L0 ~  D% i+ c# a; V; q& j6.4线程局部存储214
0 n% V) U2 G8 q9 n# H8 t6.5快速退出:quick_exit与at_quick_exit216; h  E+ c" g+ l2 B: f  {/ S
6.6本章小结219
5 E; E! }; P8 W3 S第7章为改变思考方式而改变220
: W2 b# K1 a$ W6 p6 h7.1指针空值—nullptr2207 d& e+ c. a- i; a# v# P; E
7.1.1指针空值:从0到NULL,再到nullptr220
$ B- `6 L3 D) x& r; G7.1.2nullptr和nullptr_t223+ K" |. a8 y1 K. o5 e
7.1.3一些关于nullptr规则的讨论2257 O" G$ q" C! U, r6 g& b2 R
7.2默认函数的控制227+ Y4 V. a! M" P- ~3 `
7.2.1类与默认函数2276 s) J$ {* P2 q& ^+ g( e- d" @
7.2.2“=default”与“=deleted”230
% ^6 j+ D8 `9 R- c' q8 J7.3lambda函数2347 ]% `6 S1 f0 \) x9 G
7.3.1lambda的一些历史234
/ F: s  Q9 d  S7.3.2C++11中的lambda函数235
. B6 _, l- `9 S8 D7.3.3lambda与仿函数238
- Q% h0 _3 o* r6 e7.3.4lambda的基础使用240: k4 o  k* w: ~2 u# x2 B
7.3.5关于lambda的一些问题及有趣的实验243  y& P7 T( G+ j; k$ e
7.3.6lambda与STL247
# o4 ^- e( X' f1 C2 p, C+ k7.3.7更多的一些关于lambda的讨论254
7 ^- w7 o7 m0 f# e7.4本章小结256
( m) I5 }- b4 ?' Q. i& `5 d第8章融入实际应用258
9 n0 m; e( J* i  |  E' i! v  I8.1对齐支持258
7 @8 ]' L( p% A8.1.1数据对齐258! Q! l; k' `$ ^0 B; B5 T! x
8.1.2C++11的alignof和alignas2615 k$ R7 }4 N  F0 H9 u' ~
8.2通用属性267
  W" r" ], v  n6 Z: n7 O$ l8.2.1语言扩展到通用属性267
' o# h" J8 S/ J) M* k2 g8.2.2C++11的通用属性268
8 N/ Q$ h# @- X; Z2 V1 a! ~8 Q8.2.3预定义的通用属性270
6 Y1 q9 ?0 O- s2 Z. ~; t" z# B4 f  Q8.3Unicode支持2743 l7 z( t8 }2 ?* z
8.3.1字符集、编码和Unicode274. M0 }9 S9 F. ?6 |$ b& s' y5 \  Z
8.3.2C++11中的Unicode支持276# R+ j, }* z4 K  @& f, o. z/ v
8.3.3关于Unicode的库支持280; y8 w7 H( p( T% ]
8.4原生字符串字面量284) X7 B8 C" z# y# x1 u4 Q
8.5本章小结286) Z' k* A3 g3 U' a! M
附录AC++11对其他标准的不兼容项目287
3 }1 a: ], R" O" v附录B弃用的特性2944 C9 Q+ M" L" z
附录C编译器支持301
5 f; v. K3 a6 n4 @  _8 M5 l! V附录D相关资源304
' r' n. H7 ?* ?' A. p. x( R

3 I1 d# n; v; c5 K- ^4 D% R3 S4 ~. i: Z6 g- T6 G: u7 K: F. F4 e
封面! o5 ?& t* P& F- b
1.jpg
' ?% J' w" D# N" p- K- O9 \
7 y: ?# o2 ~4 q' k6 z0 D截图; Z9 q. A3 r# c* \; P
2.jpg
' U$ u8 v- {: ?( j/ L/ P  M/ k$ X0 D# [  [# |; T) J8 b9 f" P- m% Y
: L4 i" g  Z4 j

) h' u+ U) @) A6 \% N
作者: 叶小伦    时间: 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
( I- ~7 v# Z' S" g& ~
作者: gancm    时间: 2015-1-6 17:17
看看。。。。。。。。。
: F( a: }  e1 ?1 `- j4 |( C3 i
作者: 慢跑20    时间: 2015-1-21 12:03
不错,长盛不衰的语言
* D1 K9 ^/ y# e9 P% n, D
作者: zszzsz111    时间: 2015-2-1 22:25
不错的,谢谢楼主分享~3 |0 j! ]0 T+ W# S* t

作者: jiangtai    时间: 2015-2-3 14:11
挺不错的,支持一下2 O2 f; I& A1 k: _' p( ]+ i& d

作者: jiay    时间: 2015-2-3 14:30
good..............1 |9 ~5 ]# l5 @; d6 Q

作者: LYJA    时间: 2016-9-4 13:04
It is so good,thank you very much!
+ n; i& c, S; g0 o9 X" i) z




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5