Boost程序库完全开发指南――深入C++"准”标准库(第4版)

Boost程序库完全开发指南――深入C++"准”标准库(第4版) pdf epub mobi txt 电子书 下载 2025

罗剑锋 著
图书标签:
  • C++
  • Boost
  • 程序库
  • 开发指南
  • C++标准库
  • 深入学习
  • 编程技术
  • 技术图书
  • 计算机科学
  • 代码实现
  • 第四版
想要找书就要到 静流书站
立刻按 ctrl+D收藏本页
你会得到大惊喜!!
出版社: 电子工业出版社
ISBN:9787121324604
版次:4
商品编码:12174707
品牌:Broadview
包装:平装
开本:16开
出版时间:2017-10-01
用纸:胶版纸
页数:588
字数:812000
正文语种:中文

具体描述

产品特色

编辑推荐

适读人群 :本书内容丰富、结构严谨、详略得当、讲解透彻,带领读者领略了C++的最新前沿技术,相信会是每位C++程序员的必备工具书。

《Boost程序库完全开发指南——深入C++"准”标准库(第4版)》内容丰富、结构严谨、详略得当、讲解透彻,带领读者领略了C++的*新前沿技术,相信会是每位C++程序员的必备工具书。

内容简介

Boost 是一个功能强大、构造精巧、跨平台、开源并且完全免费的C++程序库,有着“C++‘准’标准库”的美誉。Boost 由C++标准委员会部分成员所设立的Boost 社区开发并维护,使用了许多现代C++编程技术,内容涵盖字符串处理、正则表达式、容器与数据结构、并发编程、函数式编程、泛型编程、设计模式实现等许多领域,极大地丰富了C++的功能和表现力,能够使C++软件开发更加简捷、优雅、灵活和高效。本书基于2017 年4 月发布的Boost1.64 版,介绍了其中的所有140 余个库,并且结合C++11/14/17标准详细、深入地讲解了其中数十个库,同时实现了若干颇具实用价值的工具类和函数,可帮助读者迅速地理解、掌握Boost 的用法并应用于实际的开发工作。本书内容丰富、结构严谨、详略得当、讲解透彻,带领读者领略了C++的*新前沿技术,相信会是每位C++程序员的必备工具书。

作者简介

罗剑锋(网名Chrono)在1996年就读于东北财经大学;1997年开始接触C/C++;1998年参加计算机软件专业技术资格和水平考试,获高级程序员资质;2003年毕业于北京理工大学,获计算机专业硕士学位。主要研究方向为C/C++、设计模式、高性能网络服务器开发,业余爱好是阅读、旅游、欣赏音乐和电影。

目录

目录
第 0 章导读 .................................................... 1
0.1 关于本书........................................... 1
0.2 读者对象........................................... 1
0.3 术语与风格...................................... 2
0.4 语言标准........................................... 3
0.5 本书的结构...................................... 4
0.6 如何阅读本书.................................. 5
0.7 本书的源码...................................... 5
第 1 章总论 .................................................... 7
1.1 简介................................................... 7
1.1.1 获取方式................................. 8
1.1.2 目录结构................................. 8
1.1.3 使用方式................................. 9
1.2 开发环境........................................... 9
1.2.1 操作系统和编译器................10
1.2.2 快捷安装................................10
1.2.3 完全安装................................10
1.2.4 定制安装................................11
1.2.5 编译验证................................11
1.3 构建工具..........................................12
1.3.1 安装方式................................12
1.3.2 构建脚本................................12
1.3.3 构建语言...............................13
1.3.4 构建命令...............................14
1.4 总结..................................................14
第 2 章时间与日期......................................15
2.1 timer 库概述....................................15
2.2 timer .................................................16
2.2.1 用法.......................................16
2.2.2 类摘要...................................17
2.2.3 使用建议...............................18
2.3 progress_timer .................................18
2.3.1 用法.......................................18
2.3.2 类摘要...................................19
2.4 progress_display..............................19
2.4.1 类摘要...................................20
2.4.2 用法.......................................21
2.4.3 注意事项...............................22
2.5 date_time 库概述............................23
2.5.1 使用方式...............................23
2.5.2 基本概念...............................24
2.6 处理日期..........................................24
2.6.1 日期.......................................25
2.6.2 创建日期对象........................25
目录
Boost 程序库完全开发指南―深入C++“准”标准库(第4 版)
X
2.6.3 访问日期................................27
2.6.4 日期的输出............................28
2.6.5 转换C 结构...........................29
2.6.6 日期长度................................29
2.6.7 日期运算................................30
2.6.8 日期区间................................31
2.6.9 日期区间运算........................33
2.6.10 日期迭代器..........................34
2.6.11 其他功能..............................35
2.6.12 综合运用..............................36
2.7 处理时间..........................................38
2.7.1 时间长度................................39
2.7.2 操作时间长度........................40
2.7.3 时间精确度............................42
2.7.4 时间点...................................43
2.7.5 创建时间点对象....................44
2.7.6 操作时间点对象....................44
2.7.7 转换C 结构...........................45
2.7.8 时间区间................................46
2.7.9 时间迭代器............................46
2.7.10 综合运用..............................47
2.8 date_time 库的高级议题...............49
2.8.1 编译配置宏............................50
2.8.2 自定义字面值........................50
2.8.3 格式化时间............................51
2.8.4 本地时间................................51
2.9 总结..................................................53
第 3 章内存管理...........................................55
3.1 smart_ptr 库概述.............................55
3.1.1 RAII 机制..............................55
3.1.2 智能指针................................56
3.2 scoped_ptr ........................................57
3.2.1 类摘要...................................57
3.2.2 操作函数................................58
3.2.3 用法.......................................59
3.2.4 对比标准...............................61
3.3 shared_ptr ........................................63
3.3.1 类摘要...................................63
3.3.2 操作函数...............................64
3.3.3 用法.......................................65
3.3.4 工厂函数...............................67
3.3.5 应用于标准容器....................68
3.3.6 应用于桥接模式....................69
3.3.7 应用于工厂模式....................70
3.3.8 定制删除器............................72
3.3.9 高级议题...............................73
3.4 weak_ptr...........................................76
3.4.1 类摘要...................................76
3.4.2 用法.......................................77
3.4.3 对象自我管理........................78
3.4.4 打破循环引用........................79
3.5 intrusive_ptr.....................................80
3.5.1 类摘要...................................80
3.5.2 用法.......................................81
3.5.3 引用计数器............................82
3.6 pool 库概述.....................................83
3.7 pool...................................................83
3.7.1 类摘要...................................84
3.7.2 操作函数...............................84
3.7.3 用法.......................................85
3.8 object_pool ......................................86
3.8.1 类摘要...................................86
3.8.2 操作函数...............................86
3.8.3 用法.......................................87
3.8.4 更多的构造参数....................88
3.9 singleton_pool .................................89
3.9.1 类摘要...................................89
3.9.2 用法.......................................90
3.10 pool_alloc ......................................91
目录
Boost 程序库完全开发指南―深入C++“准”标准库(第4 版)
XI
3.11 总结................................................91
第 4 章实用工具...........................................93
4.1 noncopyable.....................................93
4.1.1 原理.......................................94
4.1.2 用法.......................................94
4.1.3 实现.......................................95
4.2 ignore_unused..................................96
4.2.1 基本用法................................96
4.2.2 模板用法................................97
4.3 optional.............................................97
4.3.1 类摘要...................................98
4.3.2 操作函数................................99
4.3.3 用法.....................................100
4.3.4 工厂函数..............................101
4.4 assign..............................................102
4.4.1 list_inserter...........................102
4.4.2 operator+=............................103
4.4.3 operator () ............................104
4.4.4 generic_list...........................105
4.4.5 初始化容器..........................106
4.4.6 重复输入..............................108
4.4.7 操作非标准容器..................109
4.4.8 其他议题..............................110
4.5 tribool .............................................110
4.5.1 类摘要.................................110
4.5.2 用法.....................................111
4.5.3 为第三态更名......................112
4.5.4 输入/输出............................113
4.5.5 其他议题..............................113
4.6 operators.........................................114
4.6.1 基本运算概念......................116
4.6.2 算术操作符..........................116
4.6.3 基类链.................................118
4.6.4 复合运算概念......................119
4.6.5 相等与等价..........................121
4.6.6 解引用操作符......................122
4.6.7 下标操作符..........................123
4.6.8 布尔转型操作符..................124
4.6.9 二元操作符..........................126
4.7 exception........................................126
4.7.1 标准库中的异常..................127
4.7.2 类摘要.................................127
4.7.3 向异常传递信息..................129
4.7.4 错误信息类..........................130
4.7.5 包装标准异常......................132
4.7.6 使用函数抛出异常..............132
4.7.7 获得更多信息......................133
4.7.8 高级议题.............................134
4.8 uuid.................................................136
4.8.1 类摘要.................................136
4.8.2 用法.....................................137
4.8.3 生成器.................................139
4.8.4 增强用法.............................141
4.8.5 转换字符串..........................142
4.8.6 摘要算法.............................143
4.9 config..............................................144
4.9.1 编译期字符串化..................144
4.9.2 静态整型常量......................145
4.10 utility ............................................145
4.10.1 二进制常量........................146
4.10.2 调用函数名........................147
4.11 总结..............................................148
第 5 章字符串与文本处理.......................151
5.1 lexical_cast ....................................151
5.1.1 函数声明.............................152
5.1.2 用法.....................................152
5.1.3 错误处理.............................153
5.1.4 转换对象的要求..................154
目录
Boost 程序库完全开发指南―深入C++“准”标准库(第4 版)
XII
5.1.5 应用于自定义类..................155
5.1.6 对比标准..............................156
5.2 format .............................................157
5.2.1 简单的例子..........................157
5.2.2 输入操作符..........................159
5.2.3 类摘要.................................160
5.2.4 格式化语法..........................161
5.2.5 性能优化..............................162
5.2.6 高级用法..............................162
5.3 string_ref ........................................164
5.3.1 类摘要.................................164
5.3.2 用法.....................................166
5.4 string_algo .....................................167
5.4.1 简单示例..............................168
5.4.2 算法概述..............................169
5.4.3 大小写转换..........................169
5.4.4 判断式(算法) ..................170
5.4.5 判断式(函数对象) ..........172
5.4.6 分类.....................................172
5.4.7 修剪.....................................173
5.4.8 查找.....................................174
5.4.9 替换与删除..........................176
5.4.10 分割...................................177
5.4.11 合并...................................179
5.4.12 查找(分割)迭代器.........179
5.5 xpressive.........................................181
5.5.1 使用方式..............................181
5.5.2 正则表达式简介..................182
5.5.3 类摘要.................................183
5.5.4 正则匹配..............................185
5.5.5 正则查找..............................187
5.5.6 正则替换..............................188
5.5.7 正则迭代..............................189
5.5.8 正则分词..............................190
5.5.9 高级议题..............................192
5.6 总结................................................194
第 6 章正确性与测试................................197
6.1 assert...............................................197
6.1.1 基本用法.............................197
6.1.2 禁用断言.............................198
6.1.3 扩展用法.............................199
6.2 static_assert ...................................200
6.2.1 定义.....................................201
6.2.2 用法.....................................201
6.2.3 使用建议.............................203
6.3 lightweight_test .............................203
6.3.1 测试断言.............................203
6.3.2 用法.....................................204
6.3.3 测试元编程..........................205
6.4 test ..................................................205
6.4.1 最小化测试..........................206
6.4.2 单元测试框架......................207
6.4.3 测试断言.............................208
6.4.4 测试主体.............................209
6.4.5 测试实例.............................210
6.4.6 测试夹具.............................212
6.4.7 测试日志.............................214
6.4.8 运行参数.............................215
6.4.9 高级议题.............................216
6.5 总结................................................219
第 7 章容器与数据结构............................221
7.1 array................................................221
7.1.1 类摘要.................................222
7.1.2 操作函数.............................222
7.1.3 用法.....................................223
7.1.4 能力限制.............................224
7.1.5 初始化.................................224
7.1.6 对比标准.............................225
7.2 dynamic_bitset ..............................225
目录
Boost 程序库完全开发指南―深入C++“准”标准库(第4 版)
XIII
7.2.1 类摘要.................................226
7.2.2 创建与赋值..........................227
7.2.3 容器操作..............................228
7.2.4 基本运算..............................229
7.2.5 访问元素..............................230
7.2.6 类型转换..............................231
7.2.7 集合操作..............................232
7.2.8 综合运用..............................233
7.3 unordered .......................................234
7.3.1 散列集合简介......................234
7.3.2 散列集合的用法..................236
7.3.3 散列映射简介......................238
7.3.4 散列映射的用法..................239
7.3.5 高级议题..............................241
7.4 bimap ..............................................243
7.4.1 类摘要.................................243
7.4.2 基本用法..............................244
7.4.3 值的集合类型......................245
7.4.4 集合类型的用法..................246
7.4.5 使用标签类型......................247
7.4.6 使用assign 库......................249
7.4.7 查找与替换..........................249
7.4.8 投射.....................................251
7.4.9 高级议题..............................252
7.5 circular_buffer ...............................253
7.5.1 类摘要.................................253
7.5.2 用法.....................................254
7.5.3 环形结构..............................255
7.5.4 空间优化..............................256
7.6 tuple ................................................257
7.6.1 二元组.................................257
7.6.2 类摘要.................................258
7.6.3 创建与赋值..........................258
7.6.4 访问元素..............................260
7.6.5 比较操作..............................261
7.6.6 输入输出.............................261
7.6.7 连结变量.............................262
7.6.8 内部结构.............................263
7.6.9 使用访问者模式..................264
7.6.10 高级议题...........................266
7.7 any ..................................................269
7.7.1 类摘要.................................269
7.7.2 访问元素.............................270
7.7.3 用法.....................................271
7.7.4 简化操作.............................271
7.7.5 保存指针.............................272
7.7.6 输出.....................................273
7.7.7 高级议题.............................275
7.8 variant.............................................276
7.8.1 类摘要.................................276
7.8.2 访问元素.............................277
7.8.3 用法.....................................278
7.8.4 访问器.................................279
7.8.5 高级议题.............................281
7.9 multi_array.....................................283
7.9.1 类摘要.................................284
7.9.2 用法.....................................285
7.9.3 改变形状和大小..................287
7.9.4 创建子视图..........................287
7.9.5 适配普通数组......................289
7.9.6 高级议题.............................290
7.10 property_tree ...............................292
7.10.1 类摘要...............................293
7.10.2 读取配置信息....................294
7.10.3 写入配置信息....................296
7.10.4 更多用法...........................297
7.10.5 数据格式...........................298
7.10.6 高级议题...........................300
7.11 总结..............................................302
目录
Boost 程序库完全开发指南―深入C++“准”标准库(第4 版)
XIV
第8 章算法 .................................................305
8.1 foreach............................................305
8.1.1 用法.....................................306
8.1.2 详细解说..............................307
8.1.3 更优雅的名字......................308
8.1.4 支持的序列类型..................308
8.1.5 存在的问题..........................309
8.2 minmax...........................................310
8.2.1 用法.....................................310
8.2.2 存在的问题..........................311
8.3 minmax_element ...........................311
8.3.1 基本用法..............................312
8.3.2 其他用法..............................312
8.4 algorithm........................................313
8.4.1 clamp ...................................313
8.4.2 clamp_range .........................314
8.4.3 hex/unhex.............................314
8.5 总结................................................316
第 9 章数学与数字....................................317
9.1 math.constants ...............................317
9.1.1 基本用法..............................318
9.1.2 高级用法..............................318
9.2 integer.............................................319
9.2.1 整数特征..............................319
9.2.2 标准整数类型......................320
9.2.3 整数类型模板类..................322
9.3 rational............................................325
9.3.1 类摘要.................................326
9.3.2 创建与赋值..........................327
9.3.3 基本运算..............................327
9.3.4 类型转换..............................328
9.3.5 输入输出..............................328
9.3.6 分子与分母..........................328
9.3.7 其他议题..............................329
9.4 ratio.................................................330
9.4.1 类摘要.................................330
9.4.2 用法.....................................331
9.4.3 数字单位.............................331
9.4.4 字符串表示..........................333
9.5 crc ...................................................333
9.5.1 类摘要.................................334
9.5.2 预定义的实现类..................334
9.5.3 用法.....................................335
9.6 random............................................336
9.6.1 随机数发生器......................336
9.6.2 随机数分布器......................338
9.6.3 变量发生器..........................343
9.6.4 产生随机数据块..................344
9.6.5 真随机数发生器..................345
9.7 总结................................................348
第 10 章操作系统相关..............................349
10.1 system...........................................349
10.1.1 错误值...............................350
10.1.2 错误类别...........................350
10.1.3 错误代码...........................352
10.1.4 错误异常...........................354
10.2 chrono...........................................354
10.2.1 时间长度...........................355
10.2.2 使用时间长度....................356
10.2.3 时钟...................................358
10.2.4 时间点...............................360
10.2.5 综合运用...........................361
10.3 cpu_timer .....................................363
10.3.1 时间类型...........................364
10.3.2 cpu_timer ...........................364
10.3.4 auto_cpu_timer...................366
10.3.5 定制输出格式....................367
10.4 filesystem.....................................368
目录
Boost 程序库完全开发指南―深入C++“准”标准库(第4 版)
XV
10.4.1 类摘要...............................368
10.4.2 路径表示............................370
10.4.3 可移植的文件名................372
10.4.4 路径处理............................372
10.4.5 异常处理............................375
10.4.6 文件状态............................376
10.4.7 文件属性............................377
10.4.8 文件操作............................378
10.4.9 迭代目录............................379
10.4.10 实例1...............................382
10.4.11 实例2...............................383
10.4.12 实例3...............................385
10.4.13 文件流操作......................386
10.5 program_options .........................387
10.5.1 概述...................................387
10.5.3 选项值...............................389
10.5.4 选项描述器........................391
10.5.5 选项描述器的用法............392
10.5.6 分析器...............................394
10.5.7 存储器...............................395
10.5.8 位置选项值........................396
10.5.9 环境变量............................398
10.5.10 分组选项信息..................399
10.5.11 高级用法..........................401
10.6 总结..............................................404
第 11 章函数与回调..................................405
11.1 ref..................................................405
11.1.1 类摘要...............................406
11.1.2 基本用法............................407
11.1.3 工厂函数............................407
11.1.4 操作包装............................408
11.1.5 综合应用............................409
11.1.6 对比标准............................410
11.2 bind ...............................................411
11.2.1 工作原理...........................411
11.2.2 绑定普通函数....................413
11.2.3 绑定成员函数....................414
11.2.4 绑定成员变量....................415
11.2.5 绑定函数对象....................416
11.2.6 对比标准...........................416
11.2.7 高级议题...........................417
11.3 function ........................................421
11.3.1 类摘要...............................421
11.3.2 声明形式...........................422
11.3.3 操作函数...........................423
11.3.4 用法...................................424
11.3.5 使用ref 库.........................425
11.3.6 用于回调...........................426
11.3.7 对比auto............................428
11.3.8 对比std::function...............429
11.4 signals2 ........................................429
11.4.1 类摘要...............................430
11.4.2 操作函数...........................431
11.4.3 用法...................................432
11.4.4 返回值...............................434
11.4.5 合并器...............................434
11.4.6 管理信号连接....................436
11.4.7 更灵活的管理信号连接.....437
11.4.8 自动管理连接....................439
11.4.9 应用于观察者模式............441
11.4.10 高级议题..........................444
11.5 总结..............................................449
第 12 章并发编程......................................451
12.1 atomic...........................................451
12.1.1 类摘要...............................452
12.1.2 基本用法...........................454
12.1.3 整数用法...........................455
12.1.4 并发顺序一致性................456
目录
Boost 程序库完全开发指南―深入C++“准”标准库(第4 版)
XVI
12.2 thread............................................458
12.2.1 mutex .................................459
12.2.2 lock_guard..........................461
12.2.3 unique_lock ........................463
12.2.4 lock adapter ........................465
12.2.5 thread .................................467
12.2.6 使用线程............................469
12.2.7 中断线程............................472
12.2.8 thread_group ......................475
12.2.9 call_once ............................476
12.2.10 condition_variable ............477
12.2.11 shared_mutex....................481
12.2.12 future................................483
12.2.13 shared_future ....................486
12.2.14 高级议题..........................487
12.3 asio................................................491
12.3.1 概述...................................491
12.3.2 信号...................................497
12.3.3 定时器...............................501
12.3.4 网络通信............................507
12.3.5 同步通信............................514
12.3.6 异步通信............................516
12.3.7 解析网络地址....................521
12.3.8 使用协程............................524
12.3.9 其他议题............................526
12.4 总结..............................................530
第 13 章组件速览......................................533
13.1 算法..............................................533
13.2 字符串和文本处理.....................534
13.3 容器与数据结构.........................535
13.4 迭代器..........................................536
13.5 函数对象与高级编程................536
13.6 泛型编程.....................................538
13.7 模板元编程.................................539
13.8 预处理元编程.............................540
13.9 并发编程.....................................540
13.10 数学与数字...............................541
13.11 输入输出...................................542
13.12 操作系统相关...........................543
13.13 语言特性模拟...........................543
13.14 杂项............................................544
13.15 总结............................................546
第 14 章设计模式......................................547
14.1 创建型模式.................................548
14.2 结构型模式.................................549
14.3 行为模式.....................................552
14.4 其他模式.....................................555
14.5 总结..............................................557
第 15 章结束语..........................................559
15.1 未臻完美.....................................559
15.2 锦上添花.....................................560
15.3 工夫在诗外.................................563
15.4 临别赠言.....................................564
附录A 推荐书目.........................................565
附录B 标准简述.........................................567
附录C 关键字浅谈..................................... 571

前言/序言

  推荐序

  最近一年我电话面试了数十位C++应聘者,惯用的暖场问题是“工作中使用过STL 的哪些组件?用过Boost 的哪些组件?”得到的答案大多集中在vector、map 和shared_ptr。如果对方是在校学生,我一般会问问vector 或map 的内部实现、各种操作的复杂度,以及迭代器失效的可能场景。如果是有经验的程序员,我还会追问shared_ptr 的线程安全性、循环引用的后果及如何避免、weak_ptr 的作用等。如果这些都回答得不错,进一步还可以问问如何实现线程安全的引用计数,如何定制删除动作等。这些问题让我能迅速地判别对方的C++水平。我之所以在面试时问到Boost,是因为其中的许多组件确实可以用于编写可维护的产品代码。Boost 包含近百个程序库,其中不乏具有工程实用价值的佳品。每个人口味与技术背景不一样,对Boost 的取舍也不一样。就我的个人经验而言,首先可以使用绝对无害的库,例如noncopyable、scoped_ptr、static_assert 等,这些库的学习和使用都比较简单,容易入手。其次,有些功能自己实现起来并不困难,正好Boost 里提供了现成的代码,那就不妨一用,比如date_time 和circular_buffer 等。然后,在新项目中,对于消息传递和资源管理可以考虑采用更加现代的方式,例如用function/bind 在某些情况下代替虚函数作为库的回调接口、借助shared_ptr 实现线程安全的对象回调等。这二者会影响整个程序的设计思路与风格,需要通盘考虑,如果正确使用智能指针,在现代C++程序里一般不需要出现delete语句。最后,对某些性能不佳的库保持警惕,比如lexical_cast。总之,在项目组成员人人都能理解并运用的基础上,适当引入现成的Boost 组件,以减少重复劳动,提高生产力。Boost 是一个宝库,其中既有可以直接拿来用的代码,也有值得借鉴的设计思路。试举一例:正则表达式库regex 对线程安全的处理。

  早期的 RegEx 类不是线程安全的,它把“正则表达式”和“匹配动作”放到了一个类里边。由于有可变数据,RegEx 的对象不能跨线程使用。如今的RegEx 明确地区分了不可变(immutable)与可变(mutable)的数据,前者可以安全地跨线程共享,后者则不行。比如正则表达式本身(basic_regex)与一次匹配的结果(match_results)是不可变的;而匹配动作本身(match_regex)涉及状态更新,是可变的,于是用可重入的函数将其封装起来,不让这些数据泄露给别的线程。正是由于做了这样合理的区分,RegEx 在正常使用时就不必加锁。Donald Knuth 在“Coders at Work”一书里表达了这样一个观点:如果程序员的工作就是摆弄参数去调用现成的库,而不知道这些库是如何实现的,那么这份职业就没啥乐趣可言。换句话说,固然我们强调工作中不要重新发明轮子,但是作为一个合格的程序员,应该具备自制轮子的能力。非不能也,是不为也。

  C/C++语言的一大特点是其标准库可以用语言自身实现。C 标准库的strlen、strcpy、strcmp 系列函数是教学与练习的好题材,C++标准库的complex、string、vector 则是类、资源管理、模板编程的绝佳示范。在深入了解STL 的实现之后,运用STL 自然手到擒来,并能自动避免一些错误和低效的用法。

  对于 Boost 也是如此,为了消除使用时的疑虑,为了用得更顺手,有时我们需要适当了解其内部实现,甚至编写简化版用做对比验证。但是由于Boost 代码用到了日常应用程序开发中不常见的高级语法和技巧,并且为了跨多个平台和编译器而大量使用了预处理宏,阅读Boost 源码并不轻松惬意,需要下一番工夫。另一方面,如果沉迷于这些有趣的底层细节而忘了原本要解决什么问题,恐怕就舍本逐末了。

  Boost 中的很多库是按泛型编程的范式来设计的,对于熟悉面向对象编程的人而言,或许面临一个思路的转变。比如,你得熟悉泛型编程的那套术语,如concept、model、refinement,才容易读懂Boost.Threads 文档中关于各种锁的描述。我想,对于熟悉STL 设计理念的人而言,这不是什么大问题。

  在某些领域,Boost 不是唯一的选择,也不一定是最好的选择。比如,要生成公式化的源代码,我会首选用脚本语言写一小段代码生成程序,而不用Boost.Preprocessor;要在C++程序中嵌入领域特定语言,我会首选用Lua 或其他语言解释器,而不用Boost.Proto;要用C++程序解析上下文无关文法,我会首选用ANTLR 来定义词法与语法规则并生成解析器(parser),而不用Boost.Spirit。总之,使用Boost 时心态要平和,别较劲去改造C++语言。把它有助于提高生产力的那部分功能充分发挥出来,让项目从中受益才是关键。

  要学习 Boost,除了阅读其官方网站的文档、示例与源码外,最好能有一本比较全面的中文书在手边随时翻阅。对于不谙英文的开发者,这更是可幸之至。您手上这本《Boost 程序库完全开发指南》是很好的使用指南与参考手册。作者由浅入深地介绍了Boost 的大部分常用内容,能让读者迅速了解Boost,并从中找到自己需要的部分。拿到这本书稿之后,我有粗有细地阅读了一遍,总体来看,作者水平很高,也相当务实,对C++和Boost 的理解与运用很到位,我从这本书学到了不少新知识。为此,我乐于向希望学习Boost 程序库的开发者推荐这本靠谱的书。

  须知“功不唐捐”,作为一名现代C++程序员,在Boost 上投入的精力定能获得回报。

  陈硕

  《代码大全》译者之一

  中国·香港

  第4 版前言

  本书初版面市至今已过去了七年的时间,这些年里我一直在持续关注 Boost/C++的发展和动态,及时更新维护这本书已经成为了我的一种习惯甚至是一种生活方式。随着C++17的发布,编写新版的工作也就自然而然地提上了日程。

  这次修订的过程也是对自己的一个反省:感觉前几版有点“贪大求全”,做的是“加法”,恨不得把Boost/C++相关的所有细节都列出来,未免显得有些啰唆,所以这次的第4 版就冷静了些,开始做“减法”。在修正笔误、微调代码格式、更新date_time、test 等库之外,删去了几个实际价值不是很高的组件,例如scoped_array、swap、tokenizer 等,希望精简后阅读起来能够更加顺畅,更方便学习研究。

  不过也有声音反映作者对本书的修订过于“武断”“任性”,觉得删除的内容看不到了比较可惜。为了弥补新版导致的“缺憾”,我把之前删掉的章节都做成了PDF 文件,放到了GitHub 上,感兴趣的读者可以自行下载查阅。

  祝您阅读愉快,愿我们C++20 时再相见!

  罗剑锋

  2017 年7 月17 日于 北京 亚运村

  Boost 程序库完全开发指南—深入C++“准”标准库(第4 版)

  VI

  第1 版前言

  屈指算来,接触C++语言至今已经有十余个年头了。回首往事,不禁感慨良多。

  缘起

  1996 年我上大学最开始学的是Pascal,不得不说,Pascal 严谨的程序风格确实很适合作为一门教学语言,然而用于实际开发就不那么合适了(直到出现Delphi)。由于当时学校并未开设C 语言课程,因此在Pascal 课程结束后我就买书自学C/C++语言,并在次年报名计算机软件专业技术资格和水平考试,靠着一点点编程和考试的“天分”获得了高级程序员资质(当年很热衷考级考证,后来就“淡定”多了)。虽然有了资格证,但我仍然算是个C++的初学者,对于C++的认识还处于C 的面向过程和简单的基于对象层次上。

  新千年伊始我考入了北京理工大学就读研究生,因为跟导师做项目开始接触STL 与C++标准库,大概是2005 年从1.33 版结识了Boost,这才真正领略了C++的精髓。那段时期Java 和C#正在国内大行其道,C++则势单力薄,有关STL 和C++标准的技术书籍寥寥无几,而讲解Boost 的书更是为零,故对Boost 的学习基本只能靠自己的摸索与实践。好在Boost自带的文档相当丰富(尽管看全英文的资料十分辛苦),而且源码也写得比较清晰规范,在熟悉了STL 的基础上学习Boost 倒也并不算太难。

  但 Boost 的一个最大的特点就是“庞大”,功能组件众多,要想把它全部装进脑子里融会贯通基本上是不可能的,使用时需要经常查阅英文文档,相当麻烦。因此,在学习的过程中,我逐渐产生了编写学习笔记的想法。一开始只是一个简单的纯文本文件,记录了一些使用经验的片断,随着积累不断增加,纯文本形式已经不能满足知识整理的需求了,于是我又把这些文字迁移到了Word 文档里,把使用经验分类编目,进行较系统的归纳梳理。慢慢地,这份学习笔记居然有了上万字的规模,成为了一份很好的Boost 备忘参考,在日常的开发工作中给了我很大的帮助——就像《设计模式》一书中所说的那样,捕获了很多使用Boost 解决问题的实践经验,避免了重复发现。不过,这份资料一直仅限于我个人使用,属于“自娱自乐”的作品,从未示人。

  时间一晃到了2010 年1 月份的某天夜里,不知道是什么原因我忽然失眠了,躺在床上翻来覆去怎么也睡不着。突然,一个念头闯入了脑海:把Boost 开发经验整理出版吧,让更多人能够分享这些知识,正所谓“独乐乐,与众乐乐,孰乐?”这个大胆的想法的出现让我那天的失眠又延长了几



深度探索C++:下一代编程范式与实践 前言 C++,作为一门历史悠久却又不断焕发生机的编程语言,始终站在软件开发的尖端。它集过程式、面向对象、泛型和元编程于一体,为开发者提供了强大的表达能力和极致的性能控制。本书并非对现有C++标准库进行简单罗列或基础介绍,而是旨在带领读者深入探索C++语言的核心设计理念、高级特性以及在现代软件开发中亟待掌握的全新编程范式。我们将超越“学会”的层面,追求“精通”与“创造”,为构建高性能、可维护、可扩展的复杂系统奠定坚实的基础。 第一部分:C++语言的深层理解与现代演进 超越语法:理解C++的运行机制与内存模型 值类别与生命周期: 深入剖析左值、右值、纯右值、将亡值等概念,理解它们在表达式中的行为,以及如何通过完美转发(Perfect Forwarding)实现高效的资源管理和函数参数传递。探讨对象创建、拷贝、移动和销毁的完整生命周期,重点关注RAII(Resource Acquisition Is Initialization)原则在实际中的应用,以及其在异常安全和资源泄露预防中的关键作用。 对象模型与多态的本质: 揭示C++对象在内存中的布局,理解虚函数表(vtable)的工作原理,以及其如何实现运行时多态。深入探讨静态多态(编译期多态)与动态多态(运行期多态)的权衡,以及模板元编程如何实现编译期代码生成和优化。 内存管理的高级技巧: 除了智能指针,我们将探讨自定义内存分配器、内存池技术,以及如何针对特定场景优化内存使用,从而在性能敏感的应用中获得显著提升。理解栈、堆、全局区、静态区等不同内存区域的特性,以及它们在程序运行时的分配与回收机制。 并发与并行编程的核心: 随着多核处理器的普及,并发与并行编程已成为衡量软件性能的重要指标。我们将深入讲解C++11及后续标准引入的线程(`std::thread`)、互斥量(`std::mutex`)、条件变量(`std::condition_variable`)、原子操作(`std::atomic`)等并发原语。重点关注如何避免竞态条件(Race Condition)、死锁(Deadlock)和活锁(Livelock),并探索更高级的并发模式,如生产者-消费者模式、线程池等。 C++20及更新标准的新特性: 紧跟C++标准的最新进展,深入解析C++20引入的概念(Concepts)、范围(Ranges)、协程(Coroutines)、模块(Modules)、`std::format`等革命性特性。理解这些新特性如何简化代码编写,提高代码的可读性和性能,以及它们对未来C++编程范式的影响。例如,我们将详细演示如何利用Concepts来约束模板参数,提高编译错误的可读性,以及如何使用Ranges来以声明式的方式处理序列数据。 泛型编程的深度解析与模板元编程的艺术 模板的底层机制: 抛开模板语法的表面,深入理解模板实例化、特化、偏特化及其推导规则。掌握如何编写更灵活、更健壮的模板代码,避免常见的模板错误。 模板元编程(TMP)的威力: 探索TMP在编译期计算、类型萃取、代码生成等方面的强大能力。我们将通过一系列精心设计的示例,展示如何利用TMP实现复杂的编译期逻辑,例如,在编译期计算斐波那契数列、执行类型大小的判断等。理解TMP如何帮助我们在编译期完成原本需要在运行期进行的工作,从而显著提升程序性能。 SFINAE(Substitution Failure Is Not An Error)的应用: 深入理解SFINAE的工作原理,并学习如何利用它来根据类型特性选择性地启用或禁用模板,实现重载解析的精细控制。我们将通过实际案例,展示SFINAE在条件编译、类型检测等场景下的应用。 类型擦除(Type Erasure)与动态类型管理: 探讨类型擦除技术如何实现对不同类型对象的统一接口访问,而无需牺牲运行时类型信息。分析`std::any`、`std::variant`等标准库组件的实现原理,以及它们在需要处理异构集合或回调函数时的应用。 第二部分:现代C++设计模式与高效工程实践 面向对象设计的哲学与现代C++的融合 SOLID原则的C++实践: 深入理解面向对象设计中SOLID(单一职责、开闭、里氏替换、接口隔离、依赖倒置)原则,并结合C++的特性(如继承、多态、接口、模板)进行具体的实践指导。我们将通过具体的代码示例,演示如何设计出符合SOLID原则的类和系统。 设计模式的精髓与C++实现: 不仅仅是列举设计模式,我们将深入分析每个模式的出现背景、解决的问题、优缺点以及在C++中的最佳实现方式。从工厂模式、单例模式到观察者模式、策略模式,再到更复杂的行为型和结构型模式,我们将探讨如何在C++中灵活运用这些模式来构建可维护、可扩展的代码。 接口设计的艺术: 区分抽象基类、纯虚函数接口以及概念(Concepts)在设计中的作用。理解如何设计清晰、易于使用的接口,以及如何利用C++特性来约束接口的使用,提高代码的健壮性。 C++20的模块化与更清晰的依赖管理: 探讨C++20模块如何改变传统的头文件包含机制,实现更快的编译速度和更清晰的依赖关系。理解模块化设计对大型项目结构的影响,以及如何利用模块来组织和管理代码。 性能优化与底层调优技巧 函数式编程范式在C++中的应用: 探索C++11及以后标准引入的lambda表达式、`std::function`等特性,如何使函数式编程风格在C++中得以实现。理解函数式编程如何帮助我们编写更简洁、更易于理解和测试的代码,特别是在处理数据转换和流式计算时。 算法与数据结构的深度分析: 不仅学习标准库提供的算法和数据结构,更要理解它们的内部实现机制和时间、空间复杂度。探讨如何根据具体场景选择最合适的算法和数据结构,以及如何编写高效的自定义算法。 内存布局与缓存友好性: 深入理解CPU缓存的工作原理,以及内存布局如何影响缓存命中率。学习如何组织数据结构以提高缓存友好性,从而显著提升访问性能。 编译器优化机制探秘: 了解编译器是如何进行代码优化的,例如内联、循环展开、死代码消除等。学习如何编写编译器更容易优化的代码,以及如何通过编译器选项来指导优化过程。 性能分析工具的使用: 掌握使用性能分析工具(如`perf`、`gprof`、VTune等)来定位性能瓶颈,并根据分析结果进行有针对性的优化。 第三部分:构建健壮、可靠的C++系统 异常处理与错误管理的最佳实践 异常安全性的层次: 深入理解异常安全性(no-throw, basic, strong exception guarantee)的概念,并学习如何在设计和实现代码时提供不同级别的异常安全保证。 错误码与异常的权衡: 分析使用错误码和异常处理各自的优缺点,以及在不同场景下如何选择最合适的错误处理机制。 断言与运行时检查: 学习如何有效利用断言(`assert`)来捕获开发过程中的逻辑错误,以及在生产环境中进行必要的运行时检查,确保程序的健壮性。 单元测试、集成测试与持续集成 C++单元测试框架的应用: 掌握至少一种主流的C++单元测试框架(如Google Test、Catch2),学习如何编写有效的单元测试用例,覆盖代码的各个分支。 测试驱动开发(TDD)理念: 探讨TDD的理念以及如何在C++项目中实践,理解其对提高代码质量和设计灵活性的重要作用。 集成测试与系统验证: 学习如何设计和执行集成测试,验证不同模块之间的交互是否正确。 持续集成(CI)与自动化构建: 理解CI流程在现代软件开发中的重要性,学习如何配置CI系统,实现代码的自动构建、测试和部署。 代码规范、文档与可维护性 高质量代码的要素: 强调代码的可读性、可维护性、可重用性。学习如何编写清晰、简洁、自解释的代码。 文档的撰写与管理: 学习使用Doxygen等工具生成API文档,并强调在代码中添加必要的注释,解释设计思路和复杂逻辑。 代码审查(Code Review)的重要性: 探讨代码审查的流程和技巧,理解其在发现潜在问题、促进知识共享和提升团队协作方面的价值。 重构的艺术: 学习如何识别代码中的坏味道(code smell),并掌握安全有效的重构技术,在不改变程序行为的前提下,持续改进代码的设计和质量。 结语 C++的魅力在于其无与伦比的灵活性和性能潜力,而掌握这门语言的精髓,需要持续的学习、深入的实践和对底层原理的深刻理解。本书期望成为您在C++编程之旅中的一位忠实向导,带您穿越表象,直抵核心,在现代C++的广阔天地中,不断探索,不断创造。通过对本书内容的系统学习和实践,您将能够信心十足地应对各种复杂的技术挑战,设计和实现出高性能、高质量的C++应用程序。

用户评价

评分

作为一名资深的C++架构师,我一直在寻找能够提升团队开发效率和代码质量的工具和技术。Boost无疑是其中一个重要的选择,而《Boost程序库完全开发指南――深入C++"准”标准库(第4版)》这本书,成为了我推荐给团队成员的首选读物。书中对Boost.Asio的深入剖析,完全符合我们团队在网络通信方面的需求。作者不仅讲解了Asio的基本用法,还详细阐述了异步I/O模型的原理,以及如何利用Proactor模式实现高效的网络服务。书中提供的实际案例,例如构建一个高性能的HTTP服务器,为我们提供了宝贵的参考。这比我们之前使用的一些第三方库,在性能和灵活性上都有显著的提升。此外,书中对Boost.Serialization的讲解也为我们解决了数据持久化的问题。我们之前的序列化方案存在一些兼容性和性能瓶颈,而Boost.Serialization提供了更加通用和高效的解决方案,能够方便地对各种C++数据结构进行序列化和反序列化,这大大简化了我们的数据存储和传输工作。这本书的价值,在于它不仅涵盖了Boost的核心库,更重要的是,它将这些库的应用场景与实际的软件开发需求紧密结合,为开发者提供了切实可行的解决方案。

评分

老实说,刚拿到这本书的时候,我对它的期待并没有那么高,总觉得Boost嘛,网上找找例子就能懂。但翻开第一页,我就被作者的写作风格吸引住了。他不是那种枯燥地罗列API的作者,而是仿佛一位经验丰富的导师,娓娓道来,将Boost的精髓一点点展现在读者面前。尤其是在讲解Boost.Filesystem时,我原本以为这只是一个简单的文件操作库,没想到书中竟然详细阐述了跨平台文件系统操作的注意事项,以及如何优雅地处理路径、文件权限等细节。作者还举了一个实际的例子,如何利用Boost.Filesystem构建一个跨平台的日志文件管理系统,这让我茅塞顿开,原来Boost的强大之处在于它能够解决开发中那些看似微小但却至关重要的细节问题。此外,书中关于Boost.Regex的部分也让我受益匪浅。我之前一直依赖C++11的标准库进行正则表达式匹配,但Boost.Regex提供了更丰富的功能和更高的性能,特别是在处理复杂模式匹配和回溯时,Boost.Regex的表现远超我的预期。作者通过多个实际案例,展示了如何利用Boost.Regex实现文本解析、数据提取等任务,让我对正则表达式的应用有了更深层次的认识。这本书的价值,在于它不仅仅教会你“怎么用”,更重要的是教会你“为什么这么用”,以及“如何用得更好”。

评分

阅读《Boost程序库完全开发指南――深入C++"准”标准库(第4版)》是一次非常愉快的学习体验。我是一名在校研究生,在进行算法研究和项目开发的过程中,经常会遇到一些标准库无法直接满足的需求。这本书就像一本武功秘籍,为我打开了新世界的大门。其中,关于Boost.Graph的讲解,让我对图论算法的理解上升到了一个新的高度。我之前总是需要自己从头实现各种图算法,效率低下且容易出错。而Boost.Graph提供了一套强大而灵活的图表示和算法库,让我能够轻松地实现最短路径、最小生成树等算法,并且性能优异。作者通过一个实际的例子,讲解了如何利用Boost.Graph解决路径规划问题,这对我正在进行的一个项目非常有启发。另外,书中对Boost.Spirit的讲解也让我眼前一亮。我之前在处理复杂的文本解析任务时,常常感到力不从心。Boost.Spirit提供了一种基于文法定义的解析器生成器,让我能够以一种非常自然和直观的方式来定义和实现解析器,这极大地简化了我的工作。通过书中的例子,我学会了如何利用Boost.Spirit解析各种格式的文本数据,效率和准确性都得到了显著提升。总而言之,这本书对于有一定C++基础,并且希望提升自己工程能力的开发者来说,绝对是值得深入研读的。

评分

这是一本让我“相见恨晚”的书!我是一名刚入行不久的C++开发新手,在学习过程中,经常会遇到一些标准库之外的需求,这时候Boost就成了我的首选。然而,一直以来,我总觉得Boost的学习门槛有点高,资料也分散。直到我读了《Boost程序库完全开发指南――深入C++"准”标准库(第4版)》,我才真正体会到Boost的魅力。《Lambda Expressions and Function Objects》这一章,简直是为我量身定做的。作者用非常清晰的语言解释了Lambda表达式的原理,以及Boost.Lambda和`std::function`在函数式编程中的应用。我之前对函数式编程一直有点模糊的概念,通过书中的例子,我理解了如何利用Lambda表达式写出更简洁、更具表达力的代码,尤其是在STL算法的使用上,大大提高了我的开发效率。另外,书中关于Boost.PropertyTree的讲解也让我印象深刻。在处理配置文件、XML、JSON等数据格式时,Boost.PropertyTree提供了一个非常便捷的接口,我之前总是需要手动解析,耗时耗力,有了Boost.PropertyTree,一切都变得简单起来。作者通过一个实际的例子,演示了如何利用Boost.PropertyTree加载和保存各种格式的配置文件,让我感到前所未有的轻松。

评分

这本书简直是C++开发者的一场盛宴!作为一名有着几年C++开发经验的从业者,我一直深知Boost的重要性,但很多时候碍于资料的零散和学习曲线,总是浅尝辄止。这次《Boost程序库完全开发指南――深入C++"准”标准库(第4版)》的出现,彻底改变了我的看法。它不是简单地罗列Boost的各个库,而是以一种非常系统、深入的方式,将Boost的各个组件融入到实际的开发场景中进行讲解。我印象最深的是关于Smart Pointers的部分,书中不仅详细介绍了`shared_ptr`、`unique_ptr`等标准库已有的智能指针,还深入剖析了Boost提供的更灵活、更强大的`intrusive_ptr`,以及在处理循环引用、性能优化等方面的独到见解。作者通过大量的代码示例,清晰地展示了如何在实际项目中规避内存泄漏、提高代码健壮性,这对于任何需要处理复杂内存管理的应用来说,都具有极高的参考价值。而且,书中对于并发编程的讲解也让我耳目一新,`thread`库和`mutex`的用法在实际项目中至关重要,作者通过生动易懂的例子,将这些复杂的概念剖析得淋漓尽致,让我对多线程程序的编写有了更深的理解。总而言之,这本书对于想在C++领域深耕的开发者来说,绝对是不可多得的宝藏。

评分

内容很实用

评分

这本C++书,讲的很好,令人深思

评分

ngx,是著名的外部服务器,性能优异,运行效率远超全能的,apache,tomcat,广泛应用于国内外诸多顶级互联网公司,nginix,是一个突出现象,仍突出,有话您活哟,灵活有效的模块化结构,可以在不修改核心的前提下增加任意功能拥有带一个官方及非官方官方的功能模块,是他长成一个全能的服务器软件

评分

很好的书,印刷和纸张都很好。

评分

不错,真心不错,下次再来买。

评分

不错

评分

不错的书

评分

大师经典著作,学到很多东西进步很大

评分

终于有机会深入学习一下boost了呀

相关图书

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 book.coffeedeals.club All Rights Reserved. 静流书站 版权所有