数学建模社区-数学中国

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

作者: 数学中国—罂粟    时间: 2014-7-25 10:30
标题: 深入理解C++11:C++11新特性解析与应用
本帖最后由 数学中国—罂粟 于 2014-7-25 10:31 编辑
* K' o- D6 `& t( j; j8 {8 D& ]% B1 A2 P1 {) E
内容简介
5 E4 ?2 _9 Q( o# I& T/ c深入理解C++11:C++11新特性解析与应用》内容简介:国内首本全面深入解读C++11新标准的专著,由C++标准委员会代表和IBM XL编译器中国开发团队共同撰写。不仅详细阐述了C++11标准的设计原则,而且系统地讲解了C++11新标准中的所有新语言特性、新标准库特性、对原有特性的改进,以及如何应用所有这些新特性。( \, d. b9 u' i
深入理解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的相关资源。
4 D, m$ A7 b9 X; [+ @, S7 b  J* K9 @1 k! ^
编辑推荐. P& `( K4 f4 z8 ^
深入理解C++11:C++11新特性解析与应用》编辑推荐:C++标准委员会成员和IBM XL编译器中国开发团队共同撰写,权威性毋庸置疑。系统、深入、详尽地讲解了C++11新标准中的新语言特性、新标准库特性、对原有特性的改进,以及所有这些新特性的应用。( }/ v# k5 y8 e  X% J

% W$ m: [& C) m& B$ z$ W7 Z作者简介& R" \/ _; L2 F  |6 ]( L
作者:(加拿大)Michael Wong IBM XL编译器中国开发团队' J/ g( C) J% f3 c* F  m- F' L
- C8 F) o- e) z6 W
Michael Wong,C++11标准委员会(WG21)委员,WG21加拿大代表团团长及IBM公司代表(投票人),WG21 SG5(transactional Memory study group)学习小组组长。除此之外,Michael还是OpenMP委员会的CEO,SCC(Standards Council of Canada)的副主席。
; n: w1 E7 h; U( O& R( i5 DMichael是多个C++11/OpenMP/STM新特性的合作编写者,活跃于各种技术会议,而且为Programming Committee of Boost以及IWOMP等国际会议服务。Michael也是IBM公司的高级技术专家,领导IBM XL C++编译器、XL C编译器的开发工作,当前致力于IBM编译器的C++11新特性部署。Michael在并行编程、C++基准测试、对象模型、泛型编程、模板元编程等多个技术领域均有涉猎,并且在对象模型以及事务内存等方面取得过多个专利。9 e" M& \& b) E
早年Michael于多伦多大学获取得了天体物理学的学士学位,并在滑铁卢大学获得了硕士学位。在加入IBM之前,Michael曾先后供职于大卫?邓禄普天文台(David Dunlap Observatory),CDC公司(Control Data Corporation),BMO Nesbitt Burns公司等。
- w& d8 r2 v8 r2 qIBM 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新特性的开发工作。
* i' A( q1 d: M
) S. z; H, |) i3 O+ b目录免责声明$ s/ u  Y/ {$ L4 C5 K" }) j$ J

7 z" x8 @: _! Q0 m. M前言6 P8 x. a5 a4 X
第1章新标准的诞生1
) ]) W# M4 ?6 a& M& z' t6 y7 H3 j8 i, B1.1曙光:C++11标准的诞生1
, d9 Q+ n' \5 F$ B: U' `1.1.1C++11/C++0x(以及C11/C1x)——新标准诞生1) L% a# j! h  o& q" {0 |
1.1.2什么是C++11/C++0x2
0 p( Y9 }2 x0 O6 o1.1.3新C++语言的设计目标3
6 N$ G# |& V6 \+ o$ ]9 v6 i1.2今时今日的C++5
% M7 b( v1 S1 ~1.2.1C++的江湖地位5
# Q. s! w) c! a& X' V/ u- j' c2 G1.2.2C++11语言变化的领域5  [- i; i% V2 y, X" ~" a
1.3C++11特性的分类7
% O/ |0 m$ B6 F/ g' P5 d- K! x. _* u% |3 b1.4C++特性一览11
  n- A) t5 R$ [6 r1.4.1稳定性与兼容性之间的抉择11
- g* W1 `+ V; [$ T1.4.2更倾向于使用库而不是扩展语言来实现特性12+ M5 L: @4 u$ R9 b6 d4 Z
1.4.3更倾向于通用的而不是特殊的手段来实现特性13/ @* V: P& s" j+ L% R. Y! e: w
1.4.4专家新手一概支持13# p2 R8 x1 n% g; B( u& l
1.4.5增强类型的安全性14+ d! S# a* V  s7 S4 v$ v  |
1.4.6与硬件紧密合作14
1 w8 v! t# w! y8 ^; H1.4.7开发能够改变人们思维方式的特性15+ s' u( d  {5 G( z
1.4.8融入编程现实16
. w' ~) T# l, s. b4 D1.5本书的约定17
& J5 _! {- P9 R3 _& ?& q8 Q1.5.1关于一些术语的翻译175 S( n( ?- X( b& ]
1.5.2关于代码中的注释170 o8 f0 K/ A: O1 F# q: z
1.5.3关于本书中的代码示例与实验平台185 z& x) O) ]) q9 f! A8 Z( Y  M
第2章保证稳定性和兼容性19% b4 H; F  x- k/ k' D
2.1保持与C99兼容19) ^+ Y; G. Z6 o7 l% [2 |2 _/ T; V/ O
2.1.1预定义宏19
  B) g; x4 R: \7 j/ U* ]% |. C2.1.2_func_预定义标识符20
, ^$ G1 o0 `+ b0 z1 ~7 U! g2.1.3_Pragma操作符22
8 e3 I, C; z" y. y2.1.4变长参数的宏定义以及_VA_ARGS_22
! n# A  Q! ~+ Z7 }7 s2.1.5宽窄字符串的连接23+ ]9 ]/ x  b. ?" F
2.2longlong整型23
$ q% k8 r1 N. ]# w3 ~  U2.3扩展的整型25. c3 _9 ?' c1 r+ F* `7 b+ m
2.4宏_cplusplus261 h& u1 u6 G7 x2 W; T
2.5静态断言27+ y" L0 _' b: t& A7 h
2.5.1断言:运行时与预处理时27& l# B4 O* G8 |" z2 n" u
2.5.2静态断言与static_assert28
1 m5 w* `2 b1 w% _8 e3 l5 A2.6noexcept修饰符与noexcept操作符32
: s+ b  Y% S7 b) o+ I! W4 Q, W* c2.7快速初始化成员变量36, p& r& k* d" z5 E. `5 y
2.8非静态成员的sizeof39( p3 `6 \; W+ h
2.9扩展的friend语法40
2 b0 _0 X  k, y) o+ u3 b2.10final/override控制44
! e! {# t+ _7 ]- l! i% ?  u2.11模板函数的默认模板参数489 R6 ~$ ]2 U) C5 u7 V
2.12外部模板50
; z" h2 o# I6 D2.12.1为什么需要外部模板507 @. c: _+ b+ C! `
2.12.2显式的实例化与外部模板的声明52
4 k. }  C: r: m# S, {& z! ^$ [2.13局部和匿名类型作模板实参54! {, N0 u$ w( o: H; ]
2.14本章小结55" G& S5 ?7 B- j& ?. @7 y# h7 i1 ~) ]- J9 K
第3章通用为本,专用为末57
& @3 V  G1 Z, g4 p7 c7 N. W$ p3.1继承构造函数57
9 I# Q1 ?: @6 g: p; z. X8 f- s3.2委派构造函数62
# h" x# u: V9 o1 l, j8 Z3.3右值引用:移动语义和完美转发68
4 a& i$ z$ o1 g8 k3.3.1指针成员与拷贝构造689 @7 E" Z% @* {
3.3.2移动语义69
, T; Z, r+ w4 ?5 f% Y% S; |/ B3.3.3左值、右值与右值引用75: h. p$ w+ Q  C: K
3.3.4std:move:强制转化为右值80* k: D) {8 \* Q+ y) ^
3.3.5移动语义的一些其他问题82
# B" d' Q* l7 a9 d% H5 E$ ]4 x3.3.6完美转发85
% n- I3 B1 @9 I3 S: `2 l3 u" j) x3.4显式转换操作符89! Z2 s) H4 g3 q- L$ |7 f' o8 b
3.5列表初始化927 ]& h' z. J- g+ i7 s/ f
3.5.1初始化列表92
" d, Z- U( A# X5 n) _3 J! p& ^; ~3.5.2防止类型收窄96, _3 e, }* z8 S5 K& b: L
3.6POD类型98' J5 b5 ?5 D2 R' z- a% M& x8 B
3.7非受限联合体106
: v1 e  k& x* J5 r: M3.8用户自定义字面量110
- }% o2 L. p3 h$ D3.9内联名字空间113
/ f( x! y+ P6 n# _* U/ i$ x3.10模板的别名118
: v$ D6 z# F& Q2 S. x8 g3.11一般化的SFINEA规则119  Q) X7 \- X& b5 G% j! D/ a2 o+ l. I
3.12本章小结121
5 [* w! m- W: V0 e9 Z7 T3 N& X第4章新手易学,老兵易用123
( F5 I" K% b* u$ r  y4.1右尖括号>的改进123
4 F) m) `! g0 x  t, L. N" \3 p4.2auto类型推导1240 y* U6 b% Y) M* x
4.2.1静态类型、动态类型与类型推导124: o9 r7 o% D4 [. I) [1 b
4.2.2auto的优势126
2 \7 f$ t2 q# c4 n4.2.3auto的使用细则1306 S- z& ^/ o3 }* T& i8 E  q; d; W
4.3decltype1346 |  H. B6 y4 W1 P4 }$ Z& |+ I- |
4.3.1typeid与decltype134  b1 W5 C2 t; Z! Q4 Y
4.3.2decltype的应用136# G' _6 e9 O! z% N3 u7 x! K
4.3.3decltype推导四规则140
7 Q3 ^3 q! l, u; R+ ~$ T  a4.3.4cv限制符的继承与冗余的符号143
9 M, b) F; A0 b1 t" p4.4追踪返回类型145. ^1 k9 G+ w. O: o
4.4.1追踪返回类型的引入145
1 X4 k: S6 x3 L4.4.2使用追踪返回类型的函数146
9 f. H  @3 ]# o, O- [$ ~# h- W4 T4.5基于范围的for循环150! [9 M5 t3 a2 x( W; u: Q+ [, G
4.6本章小结153$ z5 _5 F/ T- [1 G2 n; Y
第5章提高类型安全155
* ^; @8 w6 V0 V* c5.1强类型枚举155
" X* I% D9 T* l4 Q* x! u+ E5.1.1枚举:分门别类与数值的名字155
  m# c( W3 T( W% [; N4 ^' v5.1.2有缺陷的枚举类型1567 K* i0 r1 [4 E8 ~' R" g0 z
5.1.3强类型枚举以及C++11对原有枚举类型的扩展160
8 Q1 j5 z; Z: m9 H" {: V5.2堆内存管理:智能指针与垃圾回收163
; u- ~  v1 W. B8 G2 N5.2.1显式内存管理1632 `1 Z5 u' C- @7 l$ m
5.2.2C++11的智能指针1646 r! d: \# Q0 A
5.2.3垃圾回收的分类167! @! C# ]. P1 l3 _
5.2.4C++与垃圾回收169
. U! }; k7 C  [: }9 z2 Q5.2.5C++11与最小垃圾回收支持170; h0 a' C' O, U0 c& H( _; |
5.2.6垃圾回收的兼容性172) L8 }% {& I9 z. H% n
5.3本章小结173$ \2 @, Z2 k  Q- M2 {
第6章提高性能及操作硬件的能力174* ~% p3 d: d3 b% ]9 o9 q; ~- S; Q
6.1常量表达式174
/ Q' q5 P3 e4 b6 m# r6.1.1运行时常量性与编译时常量性1745 b  P4 s9 T6 O
6.1.2常量表达式函数176
, Y2 w* ]# W# z: V4 W, ^: p" H- r6.1.3常量表达式值178# S( O1 b( D- n/ l
6.1.4常量表达式的其他应用180
; h( C7 r" J8 E1 g- d$ [2 T6.2变长模板183
) u- A2 T( p. r. z- c. F+ w5 p, ?( {6.2.1变长函数和变长的模板参数1831 @2 h4 r; u# O8 g' t
6.2.2变长模板:模板参数包和函数参数包1850 ]/ L* @- S! l/ m5 W/ B
6.2.3变长模板:进阶189
9 }' f) F% ~1 {& F6.3原子类型与原子操作196, f! K5 e3 `# Z- p0 G: H; W
6.3.1并行编程、多线程与C++11196  X/ X0 n9 D- j4 ^) T" {' y  t
6.3.2原子操作与C++11原子类型197( x* J4 e0 _  x* m/ _$ W
6.3.3内存模型,顺序一致性与memory_order203
# h6 o' B) I: x* {+ N6.4线程局部存储214
* C6 S5 z- F- T5 j8 \( a6.5快速退出:quick_exit与at_quick_exit216
/ Y, h0 M: H3 N# w* b, u6.6本章小结219
, n: t- z4 W0 Q& ^/ \第7章为改变思考方式而改变2201 K7 j+ A/ d2 _+ {. x9 r: h7 ?
7.1指针空值—nullptr220
# b6 _& b7 S3 @3 o9 l7.1.1指针空值:从0到NULL,再到nullptr2208 T' \0 K) u' N& I. |
7.1.2nullptr和nullptr_t223
' l0 C5 |% {6 S/ h& X; t" G* \9 I7.1.3一些关于nullptr规则的讨论2251 t. m1 W  s6 J* e# n) n9 Z% i& A
7.2默认函数的控制227
  I4 W  O( R& q0 ~) R' r7.2.1类与默认函数227+ Y7 ^* e6 K- c. \
7.2.2“=default”与“=deleted”230
7 A. j% x& {' S* s; K9 b1 h7.3lambda函数234
. j. ^+ g( {6 B+ J' y- I9 R7.3.1lambda的一些历史234
# @) m# @6 L# W7.3.2C++11中的lambda函数235
$ b* l" {) d: v! N3 q5 L% Y7.3.3lambda与仿函数238
& x- b2 T; K+ P- }6 w7.3.4lambda的基础使用240: ~; G+ `( L+ C# [) k3 b- x( O7 R
7.3.5关于lambda的一些问题及有趣的实验243
6 |. P" u, h4 Y: _8 ~$ q7.3.6lambda与STL247* Y, z1 ^; S. x% [- s  t( d
7.3.7更多的一些关于lambda的讨论254, H, j5 m9 H3 S0 W8 ]. w
7.4本章小结256
, f) B  {7 X7 Y9 K第8章融入实际应用258
) |1 Y5 f6 ^5 V4 [8 r8.1对齐支持258
+ A. f' g2 D7 v+ S8.1.1数据对齐2581 J2 x4 N& d5 B
8.1.2C++11的alignof和alignas261
& |6 n* P: a, h8.2通用属性267; W5 Z- Q; s" [$ u  M# W" u0 J
8.2.1语言扩展到通用属性2672 S* s1 ~% n0 @2 b& F& o/ A
8.2.2C++11的通用属性268! D0 Y7 r( }8 L
8.2.3预定义的通用属性270
4 C9 E4 R' v* M) v8.3Unicode支持2745 K5 k: f/ S* D) W9 }* `6 Z
8.3.1字符集、编码和Unicode274% L. q$ d- j- ^* n- \
8.3.2C++11中的Unicode支持276
" ~8 C8 v9 d# R, ~) }2 B8.3.3关于Unicode的库支持2804 x1 n* @% V; N9 r1 }2 g
8.4原生字符串字面量284
# c3 z3 I& T0 e3 L0 V1 [" x' `8.5本章小结286
" s4 A1 b* ]$ E% ~/ o/ h附录AC++11对其他标准的不兼容项目287
) v; A/ e& v5 \4 ?附录B弃用的特性294
. y& i3 ]1 v" R5 `5 ~, {' P7 K附录C编译器支持301
+ [# t5 m8 r6 v5 P  M附录D相关资源304
! N- X, s$ l+ t+ V& u
& N& J0 o3 Y7 K
7 P0 J6 S$ Y9 P' K- O& U
封面
% _: |/ j% v4 i3 D% _* t5 w, T 1.jpg * @3 b8 Q9 ~+ S6 j; |6 R; l
3 g- L$ ?! N  `* _
截图
* r, |, D- L$ t& _8 l: \ 2.jpg . @/ M( ?* I1 q0 D" R% B

" X+ M5 [# m0 Y8 E0 u8 M2 L
* l4 C* ^9 Y7 y
# r) I) O% x* y% }$ V2 Q) @9 M. `
作者: 叶小伦    时间: 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
' z% ^5 H$ b. n; D7 k
作者: gancm    时间: 2015-1-6 17:17
看看。。。。。。。。。" @8 v+ |9 y" N* k# I& k

作者: 慢跑20    时间: 2015-1-21 12:03
不错,长盛不衰的语言
. Z, [& Q: X, ?, n: X8 Z6 P
作者: zszzsz111    时间: 2015-2-1 22:25
不错的,谢谢楼主分享~
' J* M! r' N$ ~* [# C+ I$ D' d/ O
作者: jiangtai    时间: 2015-2-3 14:11
挺不错的,支持一下
. R) a3 y& |' Q: l
作者: jiay    时间: 2015-2-3 14:30
good..............  `+ `# c) @' F$ p, f/ O* s; r; U

作者: LYJA    时间: 2016-9-4 13:04
It is so good,thank you very much!: G, ]# p  s' }* O





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