0%

基本信息

名称: C++ Templates
作者信息: 作者: Nicolai M.Josuttis [ 中文 pdf ]

简单介绍

《C++ Templates中文版》全书共22章。第1章全面介绍了《C++ Templates中文版》的内容结构和相关情况。第1部分(第2~7章)以教程的风格介绍了模板的基本概念,第2部分(第8~13章)阐述了模板的语言细节,第3部分(第14~18章)介绍了C++模板所支持的基本设计技术,第4部分(第19~22章)深入探讨了各种使用模板的普通应用程序。附录A和附录B分别为一处定义原则和重载解析的相关资料。

目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
第1章 关于本章 1
1.1 阅读本书所需具备的知识 2
1.2 本书的整体结构 2
1.3 如何阅读本书 2
1.4 关于编程风格的一些说明 3
1.5 标准和现实 5
1.6 代码例子和更多信息 5
1.7 反馈 5
第1部分 基础 7
第2章 函数模板 9
2.1 初探函数模板 9
2.1.1 定义模板 9
2.1.2 使用模板 10
2.2 实参的演绎(deduction) 12
2.3 模板参数 13
2.4 重载函数模板 15
2.5 小结 19
第3章 类模板 21
3.1 类模板Stack的实现 21
3.1.1 类模板的声明 22
3.1.2 成员函数的实现 23
3.2 类模板Stack的使用 25
3.3 类模板的特化 27
3.4 局部特化 29
3.5 缺省模板实参 30
3.6 小结 32
第4章 非类型模板参数 33
4.1 非类型的类模板参数 33
4.2 非类型的函数模板参数 36
4.3 非类型模板参数的限制 37
4.4 小结 38
第5章 技巧性基础知识 39
5.1 关键字typename 39
5.2 使用this—> 41
5.3 成员模板 42
5.4 模板的模板参数 45
5.5 零初始化 51
5.6 使用字符串作为函数模板的实参 52
5.7 小结 55
第6章 模板实战 57
6.1 包含模型 57
6.1.1 链接器错误 57
6.1.2 头文件中的模板 59
6.2 显式实例化 60
6.2.1 显式实例化的例子 61
6.2.2 整合包含模型和显式实例化 62
6.3 分离模型 63
6.3.1 关键字export 63
6.3.2 分离模型的限制 65
6.3.3 为分离模型做好准备 66
6.4 模板和内联 67
6.5 预编译头文件 68
6.6 调试模板 70
6.6.1 理解长段的错误信息 71
6.6.2 浅式实例化 72
6.6.3 长符号串 75
6.6.4 跟踪程序 75
6.6.5 oracles 79
6.6.6 archetypes 80
6.7 本章后记 80
6.8 小结 81
第7章 模板术语 83
7.1 “类模板”还是“模板类” 83
7.2 实例化和特化 84
7.3 声明和定义 85
7.4 一处定义原则 86
7.5 模板实参和模板参数 86
第2部分 深入模板 89
第8章 深入模板基础 91
8.1 参数化声明 91
8.1.1 虚成员函数 94
8.1.2 模板的链接 95
8.1.3 基本模板 96
8.2 模板参数 96
8.2.1 类型参数 97
8.2.2 非类型参数 97
8.2.3 模板的模板参数 98
8.2.4 缺省模板实参 99
8.3 模板实参 100
8.3.1 函数模板实参 101
8.3.2 类型实参 103
8.3.3 非类型实参 105
8.3.4 模板的模板实参 107
8.3.5 实参的等价性 109
8.4 友元 109
8.4.1 友元函数 110
8.4.2 友元模板 113
8.5 本章后记 113
第9章 模板中的名称 115
9.1 名称的分类 115
9.2 名称查找 117
9.2.1 Argument—DependentLookup(ADL) 119
9.2.2 友元名称插入 121
9.2.3 插入式类名称 121
9.3 解析模板 123
9.3.1 非模板中的上下文相关性 123
9.3.2 依赖型类型名称 125
9.3.3 依赖型模板名称 127
9.3.4 using—declaration中的依赖型名称 129
9.3.5 ADL和显式模板实参 130
9.4 派生和类模板 131
9.4.1 非依赖型基类 131
9.4.2 依赖型基类 132
9.5 本章后记 134
第10章 实例化 137
10.1 On—Demand实例化 137
10.2 延迟实例化 139
10.3 C++的实例化模型 142
10.3.1 两阶段查找 142
10.3.2 POI 142
10.3.3 包含模型与分离模型 145
10.3.4 跨翻译单元查找 146
10.3.5 例子 147
10.4 几种实现方案 149
10.4.1 贪婪实例化 151
10.4.2 询问实例化 152
10.4.3 迭代实例化 153
10.5 显式实例化 155
10.6 本章后记 159
第11章 模板实参演译 163
11.1 演绎的过程 163
11.2 演绎的上下文 165
11.3 特殊的演绎情况 167
11.4 可接受的实参转型 168
11.5 类模板参数 169
11.6 缺省调用实参 169
11.7 Barton—Nackman方法 170
11.8 本章后记 172
第12章 特化与重载 175
12.1 当泛型代码不再适用的时候 175
12.1.1 透明自定义 176
12.1.2 语义的透明性 177
12.2 重载函数模板 178
12.2.1 签名 179
12.2.2 重载的函数模板的局部排序 182
12.2.3 正式的排序原则 183
12.2.4 模板和非模板 185
12.3 显式特化 185
12.3.1 全局的类模板特化 186
12.3.2 全局的函数模板特化 189
12.3.3 全局成员特化 191
12.4 局部的类模板特化 194
12.5 本章后记 197
第13章 未来的方向 199
13.1 尖括号Hack 199
13.2 放松typename的原则 200
13.3 缺省函数模板实参 201
13.4 字符串文字和浮点型模板实参 202
13.5 放松模板的模板参数的匹配 204
13.6 typedef模板 206
13.7 函数模板的局部特化 207
13.8 typeof运算符 208
13.9 命名模板实参 210
13.10 静态属性 211
13.11 客户端的实例化诊断信息 212
13.12 重载类模板 214
13.13 List参数 215
13.14 布局控制 217
13.15 初始化器的演绎 218
13.16 函数表达式 219
13.17 本章后记 221
第3部分 模板与设计 223
第14章 模板的多态威力 225
14.1 动多态 225
14.2 静多态 228
14.3 动多态和静多态 231
14.3.1 术语 231
14.3.2 优点和缺点 232
14.3.3 组合这两种多态 232
14.4 新形式的设计模板 233
14.5 泛型程序设计 234
14.6 本章后记 236
第15章 trait与policy类 239
15.1 一个实例:累加一个序列 239
15.1.1 fixedtraits 240
15.1.2 valuetrait 243
15.1.3 参数化trait 247
15.1.4 policy和policy类 249
15.1.5 trait和policy:区别在何处 251
15.1.6 成员模板和模板的模板参数 252
15.1.7 组合多个policie和/或trait 254
15.1.8 运用普通的迭代器进行累积 255
15.2 类型函数 256
15.2.1 确定元素的类型 257
15.2.2 确定class类型 259
15.2.3 引用和限定符 261
15.2.4 promotiontrait 264
15.3 policytrait 267
15.3.1 只读的参数类型 268
15.3.2 拷贝、交换和移动 271
15.4 本章后记 275
第16章 模板与继承 277
16.1 命名模板参数 277
16.2 空基类优化 281
16.2.1 布局原则 281
16.2.2 成员作基类 284
16.3 奇特的递归模板模式 286
16.4 参数化虚拟性 289
16.5 本章后记 290
第17章 metaprogram 293
17.1 metaprogram的第一个实例 293
17.2 枚举值和静态常量 295
17.3 第2个例子:计算平方根 297
17.4 使用归纳变量 301
17.5 计算完整性 304
17.6 递归实例化和递归模板实参 304
17.7 使用metaprogram来展开循环 306
17.8 本章后记 309
第18章 表示式模板 313
18.1 临时变量和分割循环 314
18.2 在模板实参中编码表达式 319
18.2.1 表达式模板的操作数 320
18.2.2 Array类型 323
18.2.3 运算符 325
18.2.4 回顾 327
18.2.5 表达式模板赋值 329
18.3 表达式模板的性能与约束 330
18.4 本章后记 331
第4部分 高级应用程序 335
第19章 类型区分 337
19.1 辨别基本类型 337
19.2 辨别组合类型 340
19.3 辨别函数类型 342
19.4 运用重载解析辨别枚举类型 346
19.5 辨别class类型 348
19.6 辨别所有类型的函数模板 349
19.7 本章后记 352
第20章 智能指针 355
20.1 holder和trule 355
20.1.1 安全处理异常 356
20.1.2 holder 358
20.1.3 作为成员的holder 360
20.1.4 资源获取于初始化 362
20.1.5 holder的局限 363
20.1.6 复制holder 364
20.1.7 跨函数调用来复制holder 365
20.1.8 trule 366
20.2 引用记数 368
20.2.1 计数器在什么地方 370
20.2.2 并发访问计数器 370
20.2.3 析构和释放 371
20.2.4 CountingPtr模板 372
20.2.5 一个简单的非侵入式计数器 375
20.2.6 一个简单的侵入式计数器模板 377
20.2.7 常数性 378
20.2.8 隐式转型 379
20.2.9 比较 381
20.3 本章后记 383
第21章 tuple 385
21.1 duo 385
21.2 可递归duo 390
21.2.1 域的个数 390
21.2.2 域的类型 392
21.2.3 域的值 393
21.3 tuple构造 398
21.4 本章后记 403
第22章 函数对象和回调 405
22.1 直接调用、间接调用与内联调用 406
22.2 函数指针与函数引用 409
22.3 成员函数指针 411
22.4 class类型的仿函数 414
22.4.1 class类型仿函数的第1个实例 414
22.4.2 class类型仿函数的类型 416
22.5 指定仿函数 417
22.5.1 作为模板类型实参的仿函数 417
22.5.2 作为函数调用实参的仿函数 418
22.5.3 结合函数调用参数和模板类型参数 419
22.5.4 作为非类型模板实参的仿函数 420
22.5.5 函数指针的封装 421
22.6 内省 423
22.6.1 分析一个仿函数的类型 424
22.6.2 访问参数的类型 425
22.6.3 封装函数指针 426
22.7 函数对象组合 431
22.7.1 简单的组合 432
22.7.2 混合类型的组合 436
22.7.3 减少参数的个数 440
22.8 值绑定 443
22.8.1 选择绑定的目标 444
22.8.2 绑定签名 446
22.8.3 实参选择 447
22.8.4 辅助函数 453
22.9 仿函数操作:一个完整的实现 455
22.10 本章后记 457
附录A 一处定义原则 459
A.1 翻译单元 459
A.2 声明和定义 460
A.3 一处定义原则的细节 461
A.3.1 程序的一处定义约束 461
A.3.2 翻译单元的一处定义约束 463
A.3.3 跨翻译单元的等价性约束 465
附录B 重载解析 471
B.1 何时应用重载解析 472
B.2 简化过的重载解析 472
B.2.1 成员函数的隐含实参 474
B.2.2 细化完美匹配 476
B.3 重载的细节 477
B.3.1 非模板优先 477
B.3.2 转型序列 477
B.3.3 指针的转型 478
B.3.4 仿函数和代理函数 480
B.3.5 其他的重载情况 481
参考资料 483
术语表 487

亚马逊链接

基本信息

名称: Effective STL
作者信息: 作者: Scott Meyers [ 中文 pdf ]

简单介绍

C++标准模板库(STL)是革命性的,但是要想学会并用好却并不容易。 Scott Meyers(EffectiveC++与More effectivec++的作者)揭示了专家总结的一些关键规则,既有专家们总是采用的做法,也有专家们总是避免的做法。通过这些规则,STL程序员可以最大限度地使用STL。在讲述50条指导原则时,本书提供了透彻的分析和深刻的实例,以让读者学到要做什么,什么时候该这样做,以及为什么要这样做。

目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
引言
1 容器
第1 条:慎重选择容器类型。
第2 条:不要试图编写独立于容器类型的代码。
第3 条:确保容器中的对象拷贝正确而高效。
第4 条:调用empty 而不是检查size()是否为0。
第5 条:区间成员函数优先于与之对应的单元素成员函数。
第6 条:当心C++编译器最烦人的分析机制。
第7 条:如果容器中包含了通过new 操作创建的指针,切记在容器对象析构前将
指针delete 掉。
第8 条:切勿创建包含auto_ptr 的容器对象。
第9 条:慎重选择删除元素的方法。
第10 条:了解分配子(allocator)的约定和限制。
第11 条:理解自定义分配子的合理用法。
第12 条:切勿对STL 容器的线程安全性有不切实际的依赖。
2 vector 和string
第13 条:vector 和string 优先于动态分配的数组。
第14 条:使用reserve 来避免不必要的重新分配。
第15 条:注意string 实现的多样性。
第16 条:了解如何把vector 和string 数据传给旧的API。
第17 条:使用“swap 技巧”除去多余的容量。
第18 条:避免使用vector。
3 关联容器
第19 条:理解相等(equality)和等价(equivalence)的区别。
第20 条:为包含指针的关联容器指定比较类型。
第21 条:总是让比较函数在等值情况下返回false。
第22 条:切勿直接修改set 或multiset 中的键。
第23 条:考虑用排序的vector 替代关联容器。
第24 条:当效率至关重要时,请在map::operator[ ]与map::insert 之间谨慎做出选择。
第25 条:熟悉非标准的散列容器。
4 迭代器
第26 条:iterator 优先于const_iterator、reverse_iterator及const_reverse_iterator。
第27 条:使用distance 和advance 将容器的const_iterator 转换成iterator。
第28 条:正确理解由reverse_iterator 的base()成员函数所产生的iterator的用法。
第29 条:对于逐个字符的输入请考虑使用istreambuf_iterator。
5 算法
第30 条:确保目标区间足够大。
第31 条:了解各种与排序有关的选择。
第32 条:如果确实需要删除元素,则需要在remove 这一类算法之后调用erase。
第33 条:对包含指针的容器使用remove 这一类算法时要特别小心。
第34 条:了解哪些算法要求使用排序的区间作为参数。
第35 条:通过mismatch 或lexicographical_compare 实现简单的忽略大小写的字符
串比较。
第36 条:理解copy_if 算法的正确实现。
第37 条:使用accumulate 或者for_each 进行区间统计。
6 函数子、函数子类、函数及其他
第38 条:遵循按值传递的原则来设计函数子类。
第39 条:确保判别式是“纯函数”。
第40 条:若一个类是函数子,则应使它可配接。
第41 条:理解ptr_fun、mem_fun 和mem_fun_ref 的来由。
第42 条:确保less与operator<具有相同的语义。
7 在程序中使用STL
第43 条:算法调用优先于手写的循环。
第44 条:容器的成员函数优先于同名的算法。
第45 条:正确区分count、find、binary_search、lower_bound、upper_bound 和
equal_range。
第46 条:考虑使用函数对象而不是函数作为STL 算法的参数。
第47 条:避免产生“直写型”(write-only)的代码。
第48 条:总是包含(#include)正确的头文件。
第49 条:学会分析与STL 相关的编译器诊断信息。
第50 条:熟悉与STL 相关的Web 站点。
参考书目
附录A 地域性与忽略大小写的字符串比较
附录B 对Microsoft 的STL 平台的说明

亚马逊链接

基本信息

名称: C++ Primer 第五版 (英文)
作者信息: 作者: Stanley B.Lippman [ 英文 pdf ]

简单介绍

《C++ Primer英文版(第5版)》编辑推荐:最新标准C++11发布,距上一版本已10年;《C++ Primer英文版(第5版)》是唯一持续更新的全球顶级C++读本。多位深孚众望的大师组合堪称绝无仅有;经过前四个版本积累,第5版的体例堪称完美。这一版本作者历时3年完成,极力避免在原版上升级,而是将C++11的新特性真正融入各章节;更将所有代码示例用C++ 11的简化写法完成,而不是仅单独增加内容。

目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
Preface xxiii
Chapter 1 Getting Started
1.1 Writing a Simple C++Program
1.1.1 Compiling and Executing Our Program
1.2 AFirstLookat Input/Output
1.3 AWordaboutComments
1.4 FlowofControl
1.4.1 The whileStatement
1.4.2 The forStatement
1.4.3 ReadinganUnknownNumberof Inputs
1.4.4 The ifStatement
1.5 IntroducingClasses
1.5.1 The Sales_itemClass
1.5.2 AFirstLookatMemberFunctions
1.6 TheBookstoreProgram
ChapterSummary
DefinedTerms
Part I The Basics
Chapter 2 Variables and Basic Types
2.1 PrimitiveBuilt-inTypes
2.1.1 ArithmeticTypes
2.1.2 TypeConversions
2.1.3 Literals
2.2 Variables
2.2.1 VariableDefinitions
2.2.2 VariableDeclarations andDefinitions
2.2.3 Identifiers
2.2.4 Scopeof aName
2.3 CompoundTypes
2.3.1 References
2.3.2 Pointers
vii
viii Contents
2.3.3 UnderstandingCompoundTypeDeclarations
2.4 constQualifier
2.4.1 References to const
2.4.2 Pointers and const
2.4.3 Top-Level const
2.4.4 constexprandConstantExpressions
2.5 DealingwithTypes
2.5.1 TypeAliases
2.5.2 The autoTypeSpecifier
2.5.3 The decltypeTypeSpecifier
2.6 DefiningOurOwnDataStructures
2.6.1 Defining the Sales_dataType
2.6.2 Using the Sales_dataClass
2.6.3 Writing Our Own Header Files
ChapterSummary
DefinedTerms
Chapter 3 Strings, Vectors, and Arrays
3.1 Namespace usingDeclarations
3.2 Library stringType
3.2.1 Defining and Initializing strings
3.2.2 Operations on strings
3.2.3 Dealing with the Characters in a string
3.3 Library vectorType
3.3.1 Defining and Initializing vectors
3.3.2 Adding Elements to a vector
3.3.3 Other vectorOperations
3.4 IntroducingIterators
3.4.1 UsingIterators
3.4.2 IteratorArithmetic
3.5 Arrays
3.5.1 DefiningandInitializingBuilt-inArrays
3.5.2 AccessingtheElementsof anArray
3.5.3 Pointers andArrays
3.5.4 C-StyleCharacterStrings
3.5.5 InterfacingtoOlderCode
3.6 MultidimensionalArrays
ChapterSummary
DefinedTerms
Chapter 4 Expressions
4.1 Fundamentals
4.1.1 BasicConcepts
4.1.2 PrecedenceandAssociativity
4.1.3 OrderofEvaluation
4.2 ArithmeticOperators
4.3 Logical andRelationalOperators
Contents ix
4.4 AssignmentOperators
4.5 Increment andDecrementOperators
4.6 TheMemberAccessOperators
4.7 TheConditionalOperator
4.8 TheBitwiseOperators
4.9 The sizeofOperator
4.10 CommaOperator
4.11 TypeConversions
4.11.1 TheArithmeticConversions
4.11.2 Other ImplicitConversions
4.11.3 ExplicitConversions
4.12 OperatorPrecedenceTable
ChapterSummary
DefinedTerms
Chapter 5 Statements
5.1 Simple Statements
5.2 StatementScope
5.3 Conditional Statements
5.3.1 The ifStatement
5.3.2 The switchStatement
5.4 IterativeStatements
5.4.1 The whileStatement
5.4.2 Traditional forStatement
5.4.3 Range forStatement
5.4.4 The do whileStatement
5.5 JumpStatements
5.5.1 The breakStatement
5.5.2 The continueStatement
5.5.3 The gotoStatement
5.6 tryBlocks andExceptionHandling
5.6.1 A throwExpression
5.6.2 The tryBlock
5.6.3 StandardExceptions
ChapterSummary
DefinedTerms
Chapter 6 Functions
6.1 FunctionBasics
6.1.1 LocalObjects
6.1.2 FunctionDeclarations
6.1.3 SeparateCompilation
6.2 ArgumentPassing
6.2.1 PassingArgumentsbyValue
6.2.2 PassingArgumentsbyReference
6.2.3 constParametersandArguments
6.2.4 ArrayParameters
x Contents
6.2.5 main:HandlingCommand-LineOptions
6.2.6 FunctionswithVaryingParameters
6.3 Return Types and the returnStatement
6.3.1 FunctionswithNoReturnValue
6.3.2 FunctionsThatReturnaValue
6.3.3 ReturningaPointer toanArray
6.4 OverloadedFunctions
6.4.1 OverloadingandScope
6.5 Features forSpecializedUses
6.5.1 DefaultArguments
6.5.2 Inline and constexprFunctions
6.5.3 Aids for Debugging
6.6 FunctionMatching
6.6.1 ArgumentTypeConversions
6.7 Pointers toFunctions
ChapterSummary
DefinedTerms
Chapter 7 Classes
7.1 DefiningAbstractDataTypes
7.1.1 Designing the Sales_dataClass
7.1.2 Defining the Revised Sales_dataClass
7.1.3 DefiningNonmemberClass-RelatedFunctions
7.1.4 Constructors
7.1.5 Copy,Assignment, andDestruction
7.2 AccessControl andEncapsulation
7.2.1 Friends
7.3 AdditionalClassFeatures
7.3.1 ClassMembersRevisited
7.3.2 Functions That Return *this
7.3.3 ClassTypes
7.3.4 FriendshipRevisited
7.4 ClassScope
7.4.1 NameLookupandClassScope
7.5 ConstructorsRevisited
7.5.1 Constructor InitializerList
7.5.2 DelegatingConstructors
7.5.3 TheRoleof theDefaultConstructor
7.5.4 ImplicitClass-TypeConversions
7.5.5 AggregateClasses
7.5.6 LiteralClasses
7.6 staticClassMembers
ChapterSummary
DefinedTerms
Contents xi
Part II The C++ Library
Chapter 8 The IO Library
8.1 The IOClasses
8.1.1 NoCopyorAssignfor IOObjects
8.1.2 ConditionStates
8.1.3 ManagingtheOutputBuffer
8.2 File Input and Output
8.2.1 Using File Stream Objects
8.2.2 File Modes
8.3 stringStreams
8.3.1 Using an istringstream
8.3.2 Using ostringstreams
ChapterSummary
DefinedTerms
Chapter 9 Sequential Containers
9.1 Overviewof the SequentialContainers
9.2 ContainerLibraryOverview
9.2.1 Iterators
9.2.2 ContainerTypeMembers
9.2.3 begin and endMembers
9.2.4 DefiningandInitializingaContainer
9.2.5 Assignment and swap
9.2.6 ContainerSizeOperations
9.2.7 RelationalOperators
9.3 SequentialContainerOperations
9.3.1 AddingElements toaSequentialContainer
9.3.2 AccessingElements
9.3.3 ErasingElements
9.3.4 Specialized forward_listOperations
9.3.5 ResizingaContainer
9.3.6 ContainerOperationsMayInvalidateIterators
9.4 How a vectorGrows
9.5 Additional stringOperations
9.5.1 Other Ways to Construct strings
9.5.2 Other Ways to Change a string
9.5.3 stringSearchOperations
9.5.4 The compareFunctions
9.5.5 NumericConversions
9.6 ContainerAdaptors
ChapterSummary
DefinedTerms
xii Contents
Chapter 10 Generic Algorithms
10.1 Overview
10.2 AFirstLookat theAlgorithms
10.2.1 Read-OnlyAlgorithms
10.2.2 AlgorithmsThatWriteContainerElements
10.2.3 AlgorithmsThatReorderContainerElements
10.3 CustomizingOperations
10.3.1 PassingaFunctiontoanAlgorithm
10.3.2 LambdaExpressions
10.3.3 LambdaCapturesandReturns
10.3.4 BindingArguments
10.4 Revisiting Iterators
10.4.1 Insert Iterators
10.4.2 iostream Iterators
10.4.3 Reverse Iterators
10.5 StructureofGenericAlgorithms
10.5.1 TheFive IteratorCategories
10.5.2 AlgorithmParameterPatterns
10.5.3 AlgorithmNamingConventions
10.6 Container-SpecificAlgorithms
ChapterSummary
DefinedTerms
Chapter 11 Associative Containers
11.1 UsinganAssociativeContainer
11.2 Overviewof theAssociativeContainers
11.2.1 DefininganAssociativeContainer
11.2.2 Requirements onKeyType
11.2.3 The pairType
11.3 Operations onAssociativeContainers
11.3.1 AssociativeContainer Iterators
11.3.2 AddingElements
11.3.3 ErasingElements
11.3.4 Subscripting a map
11.3.5 AccessingElements
11.3.6 AWordTransformationMap
11.4 TheUnorderedContainers
ChapterSummary
DefinedTerms
Chapter 12 DynamicMemory
12.1 DynamicMemoryandSmartPointers
12.1.1 The shared_ptrClass
12.1.2 ManagingMemoryDirectly
12.1.3 Using shared_ptrs with new
12.1.4 SmartPointers andExceptions
12.1.5 unique_ptr
Contents xiii
12.1.6 weak_ptr
12.2 DynamicArrays
12.2.1 newandArrays
12.2.2 The allocatorClass
12.3 UsingtheLibrary:AText-QueryProgram
12.3.1 Designof theQueryProgram
12.3.2 DefiningtheQueryProgramClasses
ChapterSummary
DefinedTerms
Part III Tools for Class Authors
Chapter 13 Copy Control
13.1 Copy,Assign, andDestroy
13.1.1 TheCopyConstructor
13.1.2 TheCopy-AssignmentOperator
13.1.3 TheDestructor
13.1.4 TheRuleofThree/Five
13.1.5 Using = default
13.1.6 PreventingCopies
13.2 CopyControl andResourceManagement
13.2.1 ClassesThatActLikeValues
13.2.2 DefiningClassesThatActLikePointers
13.3 Swap
13.4 ACopy-ControlExample
13.5 ClassesThatManageDynamicMemory
13.6 MovingObjects
13.6.1 RvalueReferences
13.6.2 MoveConstructor andMoveAssignment
13.6.3 RvalueReferencesandMemberFunctions
ChapterSummary
DefinedTerms
Chapter 14 Overloaded Operations and Conversions
14.1 BasicConcepts
14.2 Input andOutputOperators
14.2.1 Overloading the Output Operator <<
14.2.2 Overloading the Input Operator >>
14.3 Arithmetic andRelationalOperators
14.3.1 EqualityOperators
14.3.2 RelationalOperators
14.4 AssignmentOperators
14.5 SubscriptOperator
14.6 Increment andDecrementOperators
14.7 MemberAccessOperators
14.8 Function-CallOperator
xiv Contents
14.8.1 LambdasAreFunctionObjects
14.8.2 Library-DefinedFunctionObjects
14.8.3 Callable Objects and function
14.9 Overloading,Conversions, andOperators
14.9.1 ConversionOperators
14.9.2 AvoidingAmbiguousConversions
14.9.3 FunctionMatchingandOverloadedOperators
ChapterSummary
DefinedTerms
Chapter 15 Object-Oriented Programming
15.1 OOP:AnOverview
15.2 DefiningBaseandDerivedClasses
15.2.1 DefiningaBaseClass
15.2.2 DefiningaDerivedClass
15.2.3 Conversions andInheritance
15.3 VirtualFunctions
15.4 AbstractBaseClasses
15.5 AccessControl andInheritance
15.6 ClassScopeunder Inheritance
15.7 Constructors andCopyControl
15.7.1 VirtualDestructors
15.7.2 SynthesizedCopyControl andInheritance
15.7.3 Derived-ClassCopy-ControlMembers
15.7.4 InheritedConstructors
15.8 Containers andInheritance
15.8.1 Writing a BasketClass
15.9 TextQueriesRevisited
15.9.1 AnObject-OrientedSolution
15.9.2 The Query_base and QueryClasses
15.9.3 TheDerivedClasses
15.9.4 The evalFunctions
ChapterSummary
DefinedTerms
Chapter 16 Templates and Generic Programming
16.1 DefiningaTemplate
16.1.1 FunctionTemplates
16.1.2 ClassTemplates
16.1.3 TemplateParameters
16.1.4 MemberTemplates
16.1.5 Controlling Instantiations
16.1.6 Efficiency and Flexibility
16.2 TemplateArgumentDeduction
16.2.1 Conversions andTemplateTypeParameters
16.2.2 Function-TemplateExplicitArguments
16.2.3 Trailing Return Types and Type Transformation
Contents xv
16.2.4 FunctionPointers andArgumentDeduction
16.2.5 TemplateArgumentDeductionandReferences
16.2.6 Understanding std::move
16.2.7 Forwarding
16.3 OverloadingandTemplates
16.4 VariadicTemplates
16.4.1 WritingaVariadicFunctionTemplate
16.4.2 PackExpansion
16.4.3 ForwardingParameterPacks
16.5 Template Specializations
ChapterSummary
DefinedTerms
Part IV Advanced Topics
Chapter 17 Specialized Library Facilities
17.1 The tupleType
17.1.1 Defining and Initializing tuples
17.1.2 Using a tuple toReturnMultipleValues
17.2 The bitsetType
17.2.1 Defining and Initializing bitsets
17.2.2 Operations on bitsets
17.3 RegularExpressions
17.3.1 UsingtheRegularExpressionLibrary
17.3.2 TheMatchandRegex IteratorTypes
17.3.3 UsingSubexpressions
17.3.4 Using regex_replace
17.4 RandomNumbers
17.4.1 Random-NumberEngines andDistribution
17.4.2 OtherKinds ofDistributions
17.5 The IOLibraryRevisited
17.5.1 FormattedInput andOutput
17.5.2 UnformattedInput/OutputOperations
17.5.3 RandomAccess toaStream
ChapterSummary
DefinedTerms
Chapter 18 Tools for Large Programs
18.1 ExceptionHandling
18.1.1 ThrowinganException
18.1.2 CatchinganException
18.1.3 Function tryBlocks andConstructors
18.1.4 The noexceptExceptionSpecification
18.1.5 ExceptionClassHierarchies
18.2 Namespaces
18.2.1 NamespaceDefinitions
xvi Contents
18.2.2 UsingNamespaceMembers
18.2.3 Classes,Namespaces,andScope
18.2.4 OverloadingandNamespaces
18.3 Multiple andVirtual Inheritance
18.3.1 Multiple Inheritance
18.3.2 Conversions andMultipleBaseClasses
18.3.3 ClassScopeunderMultiple Inheritance
18.3.4 Virtual Inheritance
18.3.5 Constructors andVirtual Inheritance
ChapterSummary
DefinedTerms
Chapter 19 Specialized Tools and Techniques
19.1 Controlling Memory Allocation
19.1.1 Overloading new and delete
19.1.2 Placement newExpressions
19.2 Run-TimeTypeIdentification
19.2.1 The dynamic_castOperator
19.2.2 The typeidOperator
19.2.3 UsingRTTI
19.2.4 The type_infoClass
19.3 Enumerations
19.4 Pointer toClassMember
19.4.1 Pointers toDataMembers
19.4.2 Pointers toMemberFunctions
19.4.3 UsingMemberFunctions asCallableObjects
19.5 NestedClasses
19.6 union:ASpace-SavingClass
19.7 LocalClasses
19.8 InherentlyNonportableFeatures
19.8.1 Bit-fields
19.8.2 volatileQualifier
19.8.3 Linkage Directives: extern “C”
ChapterSummary
DefinedTerms
Appendix A The Library
A.1 LibraryNames andHeaders
A.2 ABriefTourof theAlgorithms
A.2.1 Algorithms toFindanObject
A.2.2 OtherRead-OnlyAlgorithms
A.2.3 BinarySearchAlgorithms
A.2.4 AlgorithmsThatWriteContainerElements
A.2.5 PartitioningandSortingAlgorithms
A.2.6 GeneralReorderingOperations
A.2.7 PermutationAlgorithms
A.2.8 SetAlgorithms forSortedSequences
Contents xvii
A.2.9 MinimumandMaximumValues
A.2.10 NumericAlgorithms
A.3 RandomNumbers
A.3.1 RandomNumberDistributions
A.3.2 RandomNumberEngines
Index

New Features in C++ 2.1.1 long longType 2.2.1 List Initialization 2.3.2 nullptrLiteral 2.4.4 constexprVariables 2.5.1 TypeAliasDeclarations 2.5.2 The autoTypeSpecifier 2.5.3 The decltypeTypeSpecifier 2.6.1 In-Class Initializers 3.2.2 Using auto or decltype forTypeAbbreviation 3.2.3 Range forStatement 3.3 Defining a vector of vectors 3.3.1 List Initialization for vectors 3.4.1 Container cbegin and cendFunctions 3.5.3 Library begin and endFunctions 3.6 Using auto or decltype to SimplifyDeclarations 4.2 RoundingRules forDivision 4.4 Assignment fromaBracedListofValues 4.9 sizeofAppliedtoaClassMember 5.4.3 Range forStatement 6.2.6 Library initializer_listClass 6.3.2 List InitializingaReturnValue 6.3.3 Declaring a Trailing Return Type 6.3.3 Using decltype to Simplify Return Type Declarations 6.5.2 constexprFunctions 7.1.4 Using = default toGenerateaDefaultConstructor 7.3.1 In-class Initializers forMembersofClassType 7.5.2 DelegatingConstructors 7.5.6 constexprConstructors 8.2.1 Using strings for File Names 9.1 The array and forward_listContainers 9.2.3 Container cbegin and cendFunctions 9.2.4 List InitializationforContainers 9.2.5 Container Nonmember swapFunctions 9.3.1 Return Type for Container insertMembers 9.3.1 Container emplaceMembers xix xx New Features in C++ 9.4 shrink_to_fit 9.5.5 Numeric Conversion Functions for strings 10.3.2 LambdaExpressions 10.3.3 Trailing Return Type in Lambda Expressions 10.3.4 The Library bindFunction 11.2.1 List Initializationof anAssociativeContainer 11.2.3 List Initializing pairReturnType 11.3.2 List Initialization of a pair 11.4 TheUnorderedContainers 12.1 SmartPointers 12.1.1 The shared_ptrClass 12.1.2 List InitializationofDynamicallyAllocatedObjects 12.1.2 autoandDynamicAllocation 12.1.5 The unique_ptrClass 12.1.6 The weak_ptrClass 12.2.1 Range for Doesn‘t Apply to Dynamically AllocatedArrays 12.2.1 List InitializationofDynamicallyAllocatedArrays 12.2.1 autoCan’tBeUsedtoAllocateanArray 12.2.2 allocator::constructCanUseanyConstructor 13.1.5 Using = default forCopy-ControlMembers 13.1.6 Using = delete toPreventCopyingClassObjects 13.5 MovingInsteadofCopyingClassObjects 13.6.1 RvalueReferences 13.6.1 The Library moveFunction 13.6.2 MoveConstructor andMoveAssignment 13.6.2 Move Constructors Usually Should Be noexcept 13.6.2 MoveIterators 13.6.3 ReferenceQualifiedMemberFunctions 14.8.3 The functionClassTemplate 14.9.1 explicitConversionOperators 15.2.2 overrideSpecifier forVirtualFunctions 15.2.2 Preventing Inheritance by Defining a Class as final 15.3 override and final Specifiers for Virtual Functions 15.7.2 DeletedCopyControl andInheritance 15.7.4 InheritedConstructors 16.1.2 DeclaringaTemplateTypeParameteras aFriend 16.1.2 TemplateTypeAliases 16.1.3 DefaultTemplateArguments forTemplateFunctions 16.1.5 ExplicitControlof Instantiation 16.2.3 Template Functions and Trailing Return Types 16.2.5 ReferenceCollapsingRules 16.2.6 static_cast fromanLvaluetoanRvalue 16.2.7 The Library forwardFunction 16.4 VariadicTemplates 16.4 The sizeof…Operator 16.4.3 VariadicTemplates andForwarding New Features in C++11 xxi 17.1 The Library TupleClassTemplate 17.2.2 New bitsetOperations 17.3 TheRegularExpressionLibrary 17.4 TheRandomNumberLibrary 17.5.1 Floating-Point FormatControl 18.1.4 The noexceptExceptionSpecifier 18.1.4 The noexceptOperator 18.2.1 InlineNamespaces 18.3.1 InheritedConstructors andMultiple Inheritance 19.3 Scoped enums 19.3 Specifying the Type Used to Hold an enum 19.3 Forward Declarations for enums 19.4.3 The Library mem_fnClassTemplate 19.6 UnionMembersofClassTypes

亚马逊链接

基本信息

名称: 领域专用语言实战(英文版)
作者信息: 作者: Debasish Ghosh [ 英文 pdf ]

简单介绍

DSLs in Action introduces the concepts and definitions a developer needs to build high-quality domain specific languages. It provides a solid foundation to the usage as well as implementation aspects of a DSL, focusing on the necessity of applications speaking the language of the domain. After reading this book, a programmer will be able to design APIs that make better domain models. For experienced developers, the book addresses the intricacies of domain language design without the pain of writing parsers by hand.
The gap in understanding between the development team and the business domain specialists can lead to errors during user acceptance tests. This book teaches developers to build DSLs that bridge this gap by offering API development techniques that closely model the domain vocabulary. Even non-programmer domain experts can benefit from this book by learning how DSLs can make them a more integral part of the team during the program development phase.
The book discusses DSL usage and implementations in the real world based on a suite of JVM languages like Java, Ruby, Scala, and Groovy. It contains code snippets that implement real world DSL designs and discusses the pros and cons of each implementation.

目录

1
2


亚马逊链接

基本信息

名称: Effective C++ 第三版(英文)
作者信息: 作者: Scott Meyers [ 英文 pdf ]

简单介绍

“Every C++ professional needs a copy of Effective C++. It is an absolute must-read for anyone thinking of doing serious C++ development. If you’ve never read Effective C++ and you think you know everything about C++, think again.”
— Steve Schirripa, Software Engineer, Google
“C++ and the C++ community have grown up in the last fifteen years, and the third edition of Effective C++ reflects this. The clear and precise style of the book is evidence of Scott’s deep insight and distinctive ability to impart knowledge.”
— Gerhard Kreuzer, Research and Development Engineer, Siemens AG

目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Effective C++ Third Edition 55 Specific Ways to Improve Your Programs and Designs
Table of Contents
Copyright
Praise for Effective C++, Third Edition
Addison-Wesley Professional Computing Series
Preface
Acknowledgments
Introduction
Chapter 1. Accustoming Yourself to C++
Chapter 2. Constructors, Destructors, and Assignment Operators
Chapter 3. Resource Management
Chapter 4. Designs and Declarations
Chapter 5. Implementations
Chapter 6. Inheritance and Object-Oriented Design
Chapter 7. Templates and Generic Programming
Chapter 8. Customizing new and delete
Chapter 9. Miscellany
Appendix A. Beyond Effective C++
Appendix B. Item Mappings Between Second and Third Editions
Index

亚马逊链接

基本信息

名称: Effective C++ 第三版
作者信息: 作者: Scott Meyers [ 中文 pdf ]

简单介绍

《Effective C++:改善程序与设计的55个具体做法(第3版)(中文版)(双色)》前两个版本抓住了全世界无数程序员的目光。原因十分明显:Scott Meyers极富实践意义的C++研讨方式,描述出专家用以产出干净、正确、高效代码的经验法则和行事法则——也就是他们几乎总是做或不做的某些事。
《Effective C++:改善程序与设计的55个具体做法(第3版)(中文版)(双色)》一共组织55个准则,每一条准则描述一个编写出更好的C++的方式、每一个条款的背后都有具体范例支撑。第三版有一半以上的篇幅是崭新内容,包括讨沦资源管理和模块(templates)运用的两个新章。为反映出现代设计考虑,对第二版论题做了广泛的修订,包括异常(exceptions)、没汁模式(design patterns)和多线程(multithreading)。
高效的Classes、functions、templates和inheritance hierarchies(继承体系)方面的专家级指导。
崭新的“TR1”标准程序库功能应用,以及与既有标准程序库组件的比较。
洞察C++和其他语言(例如Java、C#、C)之间的不同。此举有助于那些来自其他语言阵营的开发人员消化吸收C++式的各种解法。 译序
中英简繁术语对照
目录
序言
致谢
导读

  1. 让自己习惯c++
  2. 构造/析构/赋值运算
  3. 资源管理
  4. 设计与声明
  5. 实现
  6. 继承与面向对象设计
  7. 模板与泛型编程
  8. 定制new和delete
  9. 杂项讨论
    a 本书之外
    b 新旧版条款对照
    索引

目录

1
2


亚马逊链接

基本信息

名称: Effective STL(英文)
作者信息: 作者: Scott Meyers [ 英文 pdf ]

简单介绍

Each of the book’s 50 guidelines is backedby Meyers’ legendary analysis and incisive examples, so you’lllearn not only what to do, but also when to do it – and why.Highlights of Effective STL include: * Advice on choosing amongstandard STL containers (like vector and list), nonstandard STLcontainers (like hash_set and hash_map), and non-STL containers(like bitset). * Techniques to maximize the efficiency of the STLand the programs that use it. * Insights into the behavior ofiterators, function objects, and allocators, including things youshould not do. * Guidance for the proper use of algorithms andmember functions whose names are the same (e.g., find), but whoseactions differ in subtle (but important) ways. * Discussions ofpotential portability problems, including straightforward ways toavoid them. Like Meyers’ previous books, Effective STL is filledwith proven wisdom that comes only from experience. Its clear,concise, penetrating style makes it an essential resource for everySTL programmer. Copyright
Addison-Wesley Professional Computing Series
Preface
Acknowledgments
Introduction
Ch. 1. Containers
Ch. 2. vector and string
Ch. 3. Associative Containers
Ch. 4. Iterators
Ch. 5. Algorithms
Ch. 6. Functors, Functor Classes, Functions, etc
Ch. 7. Programming with the STL
Bibliography
Appx. A. Locales and Case-Insensitive String Comparisons
How to Do Case-Insensitive String Comparison by Matt Austern

目录

1
2


亚马逊链接

基本信息

名称: Exceptional C++ Style
作者信息: 作者: Herb sutter [ 中文 pdf ]

简单介绍

本书中,C++大师Herb Sutter通过40个编程问题,不仅使读者“知其然”,更要“知其所以然”,帮助程序设计人员在软件中寻找恰到好处的折衷,即讨论如何在开销和功能性之间、优雅跟可维护性之间、灵活性与过分灵活之间寻找完美的平衡点。本书是围绕实际问题及其解决方案展开论述的,对一些至关重要的C++细节和相互关系提出了新的见解,为当今关键的C++编程技术(如泛型编程、STL、异常安全等)提供了新的策略。本书的目标是让读者在设计、架构和编码过程中保持良好的风格,从而使编写的C++软件更健壮、更高效。本书适合各个层次的C++程序员阅读

目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
泛型编程与C++标准库 1
第1条 vector的使用 2
第2条 字符串格式化的“动物庄园”之一:sprintf 9
第3条 字符串格式化的“动物庄园”之二:标准的(或极度优雅的)替代方案 14
第4条 标准库成员函数 23
第5条 泛型性的风味之一:基础 26
第6条 泛型性的风味之二:够“泛”了吗 30
第7条 为什么不特化函数模板 36
第8条 友元模板 42
第9条 导出限制之一:基础 51
第10条 导出限制之二:相互影响,可用性问题以及准则 58
异常安全问题及相关技术 67
第11条 Try和Catch 68
第12条 异常安全性:值得吗? 72
第13条 对异常规格的实际考虑 75
类的设计、继承和多态 83
第14条 顺序,顺序! 84
第15条 访问权限的使用 88
第16条 (几乎)私有 93
第17条 封 装 101
第18条 虚 拟 110
第19条 对派生类施加规则 118
内存和资源管理 129
第20条 内存中的容器之一:内存管理的层次 130
第21条 内存中的容器之二:它到底有多大? 133
第22条 进行new操作,也许会抛出异常之一:new的方方面面 140
第23条 进行new操作,也许会抛出异常之二:内存管理中的实际问题 148
优化和效率 155
第24条 常量优化 156
第25条 再论内联 161
第26条 数据格式和效率之一:什么时候压缩是真正重要的 168
第27条 数据格式和效率之二:(甚至更少的)位操纵 172
陷阱、缺陷和谜题 179
第28条 不是关键字的关键字(或者:另一种注释) 180
第29条 这是初始化么? 186
第30条 要么double要么彻底完蛋 191
第31条 狂乱的代码 194
第32条 小小的拼写错误?鬼画符似的语言以及其他奇形怪状的东西 199
第33条 操作符,无处不在的操作符 202
风格案例研究 207
第34条 索 引 表 208
第35条 泛型回调 218
第36条 构造式union 226
第37条 分解std::string之一:概观std::string 242
第38条 分解std::string之二:重构std::string 247
第39条 分解std::string之三:给std::string瘦身 255
第40条 分解std::string之四:再论std::string 259
参考文献 267

亚马逊链接

基本信息

名称: Exceptional C++
作者信息: 作者: Herb Sutter [ 中文 pdf ]

简单介绍

《exceptionalc++:47个c++工程难题、编程问题和解决方案(中文版)》讲述如何用标准c++进行企业级的软件开发,通过“问题/解答”的方式,启发读者思考,帮助了解隐藏在问题背后的设计思想,以及各种编程指导原则适用的场合。本书列出的条款涵盖了许多方面的主题,尤其对异常安全性、类和模块的合理设计,正确的代码优化,以及编写符合c++标准的可移植代码进行了深入的讨论。
《exceptional c++:47个c++工程难题、编程问题和解决方案(中文版)》适于有一定c++编程基础的读者阅读。

目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
1 泛型程序设计与c++标准库
条款1:迭代器难度系数
条款2:大小写不敏感的字符串——之一
条款3:大小写不敏感的字符串——之二
条款4:可重用性最高的泛型容器——之一
条款5:可重用性最高的泛型容器——之二
条款6:临时对象
条款7:标准库的使用(或者,再论临时对象)
2 异常安全性相关的问题与技术
条款8:编写异常安全的代码——之一
条款9:编写异常安全的代码——之二
条款10:编写异常安全的代码——之三
条款11:编写异常安全的代码——之四
条款12:编写异常安全的代码——之五
条款13:编写异常安全的代码——之六
条款14:编写异常安全的代码——之七
条款15:编写异常安全的代码——之八
条款16:编写异常安全的代码——之九
条款17:编写异常安全的代码——之十
条款18:代码的复杂性——之一
条款19:代码的复杂性——之二
3 类的设计与继承
条款20:类的编写技巧
条款21:虚函数的重载
条款22:类之间的关系——之一
条款23:类之间的关系——之二
条款24:继承的使用和滥用
条款25:面向对象程序设计
4 编译器防火墙和pimpl惯用法
条款26:将编译期依赖性降到最低——之一
条款27:将编译期依赖性降到最低——之二
条款28:将编译期依赖性降到最低——之三
条款29:编译防火墙
条款30:fast pimpl惯用法
5 名字查找、名字空间和接口规则
条款31:名字查找与接口规则——之一
条款32:名字查找与接口规则——之二
条款33:名字查找和接口规则——之三
条款34:名字查找与接口规则——之四
6 内存管理
条款35:内存管理——之一
条款36:内存管理——之二
条款37:auto_ptr
7 误区、陷阱以及错误的惯用法
条款38:对象标识
条款39:自动转换
条款40:对象的生存期——之一
条款41:对象的生存期——之二
8 其他主题
条款42:变量的初始化
条款43:正确使用const
条款44:类型转换
条款45:bool
条款46:转调函数
条款47:控制流程
后记
参考书目

亚马逊链接

基本信息

名称: Go语言编程
作者信息: 作者: 许式伟 [ 中文 pdf ]

简单介绍

国内第一本Go语言编程书
原盛大创新院研究员执笔
Go语言领域技术大牛作品
作者Go语言开发实战项目
帮助您快速入手全新语言

目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
第1章 初识Go语言 1
1.1 语言简史 1
1.2 语言特性 2
1.2.1 自动垃圾回收 3
1.2.2 更丰富的内置类型 4
1.2.3 函数多返回值 5
1.2.4 错误处理 6
1.2.5 匿名函数和闭包 6
1.2.6 类型和接口 7
1.2.7 并发编程 8
1.2.8 反射 9
1.2.9 语言交互性 10
1.3 第一个Go程序 11
1.3.1 代码解读 11
1.3.2 编译环境准备 12
1.3.3 编译程序 12
1.4 开发工具选择 13
1.5 工程管理 13
1.6 问题追踪和调试 18
1.6.1 打印日志 18
1.6.2 GDB调试 18
1.7 如何寻求帮助 18
1.7.1 邮件列表 19
1.7.2 网站资源 19
1.8 小结 19

第2章 顺序编程 20 2.1 变量 20 2.1.1 变量声明 20 2.1.2 变量初始化 21 2.1.3 变量赋值 21 2.1.4 匿名变量 22 2.2 常量 22 2.2.1 字面常量 22 2.2.2 常量定义 23 2.2.3 预定义常量 23 2.2.4 枚举 24 2.3 类型 24 2.3.1 布尔类型 25 2.3.2 整型 25 2.3.3 浮点型 27 2.3.4 复数类型 28 2.3.5 字符串 28 2.3.6 字符类型 30 2.3.7 数组 31 2.3.8 数组切片 32 2.3.9 map 36 2.4 流程控制 38 2.4.1 条件语句 38 2.4.2 选择语句 39 2.4.3 循环语句 40 2.4.4 跳转语句 41 2.5 函数 41 2.5.1 函数定义 42 2.5.2 函数调用 42 2.5.3 不定参数 43 2.5.4 多返回值 45 2.5.5 匿名函数与闭包 45 2.6 错误处理 47 2.6.1 error接口 47 2.6.2 defer 48 2.6.3 panic()和recover() 49 2.7 完整示例 50 2.7.1 程序结构 51 2.7.2 主程序 51 2.7.3 算法实现 54 2.7.4 主程序 57 2.7.5 构建与执行 59 2.8 小结 61

第3章 面向对象编程 62 3.1 类型系统 62 3.1.1 为类型添加方法 63 3.1.2 值语义和引用语义 66 3.1.3 结构体 67 3.2 初始化 68 3.3 匿名组合 68 3.4 可见性 71 3.5 接口 71 3.5.1 其他语言的接口 71 3.5.2 非侵入式接口 73 3.5.3 接口赋值 74 3.5.4 接口查询 76 3.5.5 类型查询 78 3.5.6 接口组合 78 3.5.7 Any类型 79 3.6 完整示例 79 3.6.1 音乐库 80 3.6.2 音乐播放 82 3.6.3 主程序 84 3.6.4 构建运行 86 3.6.5 遗留问题 86 3.7 小结 87 第4章 并发编程 88 4.1 并发基础 88 4.2 协程 90 4.3 goroutine 90 4.4 并发通信 91 4.5 channel 94 4.5.1 基本语法 95 4.5.2 select 95 4.5.3 缓冲机制 96 4.5.4 超时机制 97 4.5.5 channel的传递 98 4.5.6 单向channel 98 4.5.7 关闭channel 99 4.6 多核并行化 100 4.7 出让时间片 101 4.8 同步 101 4.8.1 同步锁 101 4.8.2 全局唯一性操作 102 4.9 完整示例 103 4.9.1 简单IPC框架 105 4.9.2 中央服务器 108 4.9.3 主程序 113 4.9.4 运行程序 116 4.10 小结 117

第5章 网络编程 118 5.1 Socket编程 118 5.1.1 Dial()函数 118 5.1.2 ICMP示例程序 119 5.1.3 TCP示例程序 121 5.1.4 更丰富的网络通信 122 5.2 HTTP编程 124 5.2.1 HTTP客户端 124 5.2.2 HTTP服务端 130 5.3 RPC编程 132 5.3.1 Go语言中的RPC支持与处理 132 5.3.2 Gob简介 134 5.3.3 设计优雅的RPC接口 134 5.4 JSON处理 135 5.4.1 编码为JSON格式 136 5.4.2 解码JSON数据 137 5.4.3 解码未知结构的JSON数据 138 5.4.4 JSON的流式读写 140 5.5 网站开发 140 5.5.1 最简单的网站程序 141 5.5.2 net/http包简介 141 5.5.3 开发一个简单的相册网站 142 5.6 小结 157

第6章 安全编程 158 6.1 数据加密 158 6.2 数字签名 158 6.3 数字证书 159 6.4 PKI体系 159 6.5 Go语言的哈希函数 159 6.6 加密通信 160 6.6.1 加密通信流程 161 6.6.2 支持HTTPS的Web服务器 162 6.6.3 支持HTTPS的文件服务器 165 6.6.4 基于SSL/TLS的ECHO程序 166 6.7 小结 169

第7章 工程管理 170 7.1 Go命令行工具 170 7.2 代码风格 172 7.2.1 强制性编码规范 172 7.2.2 非强制性编码风格建议 173 7.3 远程import支持 175 7.4 工程组织 175 7.4.1 GOPATH 176 7.4.2 目录结构 176 7.5 文档管理 177 7.6 工程构建 180 7.7 跨平台开发 180 7.7.1 交叉编译 181 7.7.2 Android支持 182 7.8 单元测试 183 7.9 打包分发 184 7.10 小结 184

第8章 开发工具 186 8.1 选择开发工具 186 8.2 gedit 187 8.2.1 语法高亮 187 8.2.2 编译环境 187 8.3 Vim 188 8.4 Eclipse 189 8.5 Notepad++ 192 8.5.1 语法高亮 192 8.5.2 编译环境 192 8.6 LiteIDE 193 8.7 小结 195

第9章 进阶话题 196 9.1 反射 196 9.1.1 基本概念 196 9.1.2 基本用法 197 9.1.3 对结构的反射操作 199 9.2 语言交互性 199 9.2.1 类型映射 200 9.2.2 字符串映射 201 9.2.3 C程序 201 9.2.4 函数调用 202 9.2.5 编译Cgo 203 9.3 链接符号 203 9.4 goroutine机理 204 9.4.1 协程 204 9.4.2 协程的C语言实现 205 9.4.3 协程库概述 205 9.4.4 任务 208 9.4.5 任务调度 210 9.4.6 上下文切换 211 9.4.7 通信机制 215 9.5 接口机理 216 9.5.1 类型赋值给接口 217 9.5.2 接口查询 223 9.5.3 接口赋值 224

附录A 225

亚马逊链接