C++11/14高级编程——Boost程序库探秘(第3版)

C++11/14高级编程——Boost程序库探秘(第3版)"

作者:罗剑锋
ISBN:9787302441755
定价:¥79
字数:千字
页数:
出版时间:2016.09.01
开本:
版次:3-6
装帧:
出版社:清华大学出版社
简介

C++的新标准(C++11/14)引入了许多强大易用的新特性新功能,从语言层面深刻地改变了C++的开发范式。

  Boost程序库由C++标准委员会部分成员所设立的Boost社区开发并维护,它构造精巧、跨平台、开源并且完全免费,被称为“C++‘准’标准库”,已广泛应用在实际软件开发中。Boost内容涵盖智能指针、文本处理、并发、模板元编程、预处理元编程等许多领域,其范围之广内涵之深甚至要超过C++11/14标准,极大地增强了C++的功能和表现力。

  本书基于C++最新标准和Boost程序库1.60版,深入探讨了其中的许多特性和高级组件,包括迭代器、函数对象、容器、流处理以及C++语言中最复杂最具威力的模板元编程和预处理元编程,具有较强的实用性,可帮助读者深层次地理解掌握现代C++的高级技术和Boost的内部实现机制及用法。

  全书内容丰富、结构合理、概念清晰、讲解细致,是广大C++程序员和爱好者的必备好书。

前言

第3版

随感 

“三”这个数字在我们的世界中经常有着特殊的意义:成语有三省吾身、韦编三绝,数学有三角形、三角函数,文学有《三国演义》《三个火枪手》(当然还有获得雨果奖的《三体》),而现在,本书也迎来了属于它的“三”——“第3版”。[ 题外话,有一种说法,3之所以特殊是因为它是最接近e(自然对数的底)的整数。]

本书第1版写于2011年,距今已经五年了。五年的时间对于一个人来说,足以从懵懂学步的孩童成长为天真活泼的少年,足以从青春稚气的学生成长为沉稳冷静的职场精英,对于本书来说,也经历了这样的成长过程。

每次的写作都是一种“磨砺心智”的体验,思考、打字、编码、调试、验证,书稿就在这些单调的循环往复中不断地改进完善,最终成型。

苦,但有所得,而且乐在其中。

对第2版的改动

个人感觉前两版内容有些大而庞杂,所以这次的第3版进行了适度的“瘦身”,删去一些冗余的文字和代码,微调正文的字体和字号,目标是增强可读性。

第3版对全书的结构也做了比较大的调整,如下:

新增全新的第1章,较全面地论述C++11/14标准,研究了许多实用的高级新特性。

原第1章“模板元编程”拆分为第2章和第3章,分别介绍模板元编程和类型特征萃取。

原第3章“迭代器”拆分为第5章和第6章,分别介绍迭代器和区间。

删除了原第9章“序列化”。

删除了原第12章“开发实践”。

新增第14章,介绍预处理元编程。

删除了原附录C“程序员的工具箱”,改为“Boost程序库安装简介”。

本书其他章节的重要变化还有:

第3章  :更新为C++14标准,不再介绍一些不符合标准的元函数。

第4章  :删除了value_initialized和scope_exit。

第7章  :删除了forward。

第8章  :精简文字,不再重复介绍ptr_deque、ptr_list等近似的容器。

第10章:使用C++11/14的lambda表达式改写了部分示例代码。

第12章:删除了function_types。

第13章:调整了模板元编程里断言的部分介绍。

附录B  :更新到Boost1.60版。

未来的C++ 

据未证实的传言,在“抱残守缺”多年之后,某IT大公司近期终于逐渐开始放弃使用老旧的GCC 2/3,转向GCC4.8和C++11,作者从前的呼吁总算看到了点儿效果。

虽然C++11/14标准已经发布了很久,但从目前的情况来看国内新标准的应用并不乐观,C++11的学习和使用仍然处于起步阶段,C++14更是遥不可及,许多人还未充分了解现代C++的诸多特性和优点,在今后的几年里普及C++11依然任重而道远。

明年C++17标准将登台亮相,它当初曾被寄予厚望,但随着C++标准委员会“搁置”了asio、concept、coroutine、module等重要提案,C++17或许会落到和C++14一样的“下场”:不会是重大升级,而只是一个普通的修订版,我们很有可能会继续停留在C++11这个“基准世界”里很长一段时间。

C++标准缓慢的更新速度也进一步凸显了Boost作为“准标准库”的地位和作用,我们可以不受标准委员会的限制,以库的方式自由地使用那些强大而便利但却没能进入语言标准的功能特性,从而“超越”C++标准。

C++的未来之路光明而曲折,希望本书能够成为读者迈向未来的旅途上一块值得依赖的踏    脚石。

罗剑锋

2016年5月16日 于 北京

目录

第0章  导读 1

0.1  关于本书 1

0.2  读者对象 2

0.3  C++标准 3

0.4  开发环境 3

0.5  代码风格 3

0.6  本书的结构 4

0.7  如何阅读本书 5

0.8  本书的源码 6

第1章  全新的C++语言 7

1.1  概述 8

1.2  左值与右值 9

1.2.1  定义 9

1.2.2  右值引用 10

1.2.3  转移语义 11

1.2.4  完美转发 12

1.3  自动类型推导 13

1.3.1  auto 13

1.3.2  decltype 15

1.3.3  decltype(auto) 17

1.4  面向过程编程 17

1.4.1  空指针 17

1.4.2  初始化 18

1.4.3  新式for循环 19

1.4.4  新式函数声明 20

1.5  面向对象编程 21

1.5.1  default 21

1.5.2  delete 22

1.5.3  override 23

1.5.4  final 24

1.5.5  成员初始化 25

1.5.6  委托构造 26

1.6  泛型编程 27

1.6.1  类型别名 27

1.6.2  编译期常量 28

1.6.3  静态断言 29

1.6.4  可变参数模板 29

1.7  函数式编程 31

1.7.1  lambda表达式 31

1.7.2  捕获外部变量 32

1.7.3  类型转换 34

1.7.4  泛型的lambda表达式 35

1.8  并发编程 35

1.9  面向安全编程 37

1.9.1  无异常保证 37

1.9.2  内联名字空间 37

1.9.3  强类型枚举 38

1.9.4  属性 39

1.10  更多特性 39

 1.10.1  语言版本号 39

 1.10.2  超长整型 40

 1.10.3  原始字符串 40

 1.10.4  自定义字面值 41

 1.10.5  杂项 43

1.11  总结 44

第2章  模板元编程简介 45

2.1  概述 45

2.2  语法元素 46

2.3  元数据 46

2.4  元函数 47

2.5  元函数转发 49

2.6  易用的工具宏 50

2.7  应用示例 51

2.8  总结 52

第3章  类型特征萃取 55

3.1  概述 55

3.2  元数据类别 56

3.2.1  基本类别 56

3.2.2  复合类别 58

3.3  元数据属性 60

3.3.1  基本属性 60

3.3.2  类相关属性 61

3.3.3  操作符重载属性 62

3.4  元数据关系 62

3.5  元数据运算 63

3.5.1  基本运算 63

3.5.2  特殊运算 65

3.6  解析函数元数据 67

3.7  实现原理 68

3.7.1  integral_constant 68

3.7.2  is_integral 69

3.8  应用示例 70

3.8.1  conditional 70

3.8.2  identity_type 71

3.8.3  declval 72

3.9  总结 73

第4章  实用工具 75

4.1  compressed_pair 75

4.1.1  空类 75

4.1.2  类摘要 77

4.1.3  构造与赋值 78

4.1.4  用法 78

4.1.5  实现原理 79

4.1.6  功能扩展 80

4.2  checked_delete 83

4.2.1  函数的用法 84

4.2.2  函数对象的用法 85

4.2.3  带检查的删除 87

4.2.4  实现原理 89

4.2.5  使用建议 90

4.3  addressof 90

4.3.1  用法 91

4.3.2  实现原理 92

4.3.3  使用建议 93

4.4  base_from_member 93

4.4.1  类摘要 93

4.4.2  用法 94

4.4.3  进一步的用法 96

4.5  conversion 98

4.5.1  标准转型操作符 98

4.5.2  多态对象的转型 99

4.5.3  polymorphic_downcast 101

4.5.4  polymorphic_cast 102

4.5.5  对引用转型 103

4.6  numeric conversion 104

4.6.1  bounds 104

4.6.2  numeric_cast 107

4.7  pointer 108

4.7.1  get_pointer 108

4.7.2  pointer_cast 109

4.7.3  pointee 110

4.7.4  indirect_reference 111

4.7.5  pointer_to_other 111

4.7.6  compare_pointees 113

4.7.7  pointer_traits 114

4.8  总结 115

第5章  迭代器 117

5.1  概述 117

5.1.1  迭代器模式 117

5.1.2  标准迭代器 118

5.1.3  新式迭代器 119

5.1.4  标准迭代器工具 120

5.1.5  迭代器与算法 122

5.2  next_prior 122

5.2.1  函数声明 123

5.2.2  用法 124

5.2.3  C++11/14标准 125

5.3  iterator_traits 125

5.3.1  标准迭代器特征类 126

5.3.2  类摘要 127

5.3.3  用法 127

5.4  iterator_facade 128

5.4.1  迭代器的核心操作 128

5.4.2  类摘要 129

5.4.3  用法 131

5.5  iterator_adaptor 135

5.5.1  类摘要 135

5.5.2  用法 136

5.6  迭代器工具 139

5.6.1  共享容器迭代器 139

5.6.2  发生器迭代器 141

5.6.3  逆向迭代器 143

5.6.4  间接迭代器 144

5.6.5  计数迭代器 145

5.6.6  函数输入迭代器 148

5.6.7  函数输出迭代器 151

5.6.8  过滤迭代器 153

5.6.9  转换迭代器 155

5.6.10  索引迭代器 157

5.6.11  组合迭代器 159

5.7  总结 161

第6章  区间 163

6.1  概述 163

6.2  特征元函数 164

6.3  操作函数 165

6.4  标准算法 166

6.4.1  返回原区间的算法 167

6.4.2  返回定制区间的算法 168

6.5  迭代器区间类 170

6.5.1  类摘要 170

6.5.2  用法 171

6.6  辅助工具 173

6.6.1  sub_range 173

6.6.2  counting_range 174

6.6.3  istream_range 174

6.6.4  irange 175

6.6.5  combined_range 175

6.6.6  any_range 176

6.7  适配器 178

6.7.1  适配器列表 178

6.7.2  用法 179

6.7.3  实现原理 180

6.8  其他议题 181

6.8.1  自定义区间类型 181

6.7.2  连接区间 182

6.9  总结 182

第7章  函数对象 185

7.1  hash 185

7.1.1  类摘要 186

7.1.2  用法 186

7.1.3  实现原理 187

7.1.4  扩展hash 188

7.2  mem_fn 191

7.2.1  工作原理 191

7.2.2  用法 192

7.2.3  其他议题 193

7.3  factory 194

7.3.1  类摘要 194

7.3.2  用法 195

7.3.3  value_factory 197

7.4  总结 197

第8章  指针容器 199

8.1  概述 199

8.1.1  入门示例 200

8.1.2  指针容器的优缺点 203

8.1.3  可克隆概念 204

8.1.4  克隆分配器 205

8.1.5  指针容器的分类 206

8.2  指针容器的共通功能 208

8.2.1  模板参数 208

8.2.2  构造与赋值 210

8.2.3  访问元素 211

8.2.4  其他功能 213

8.3  序列指针容器适配器 214

8.3.1  配置元函数 214

8.3.2  类摘要 215

8.3.3  接口解说 216

8.3.4  代码示例 216

8.4  ptr_vector 217

8.4.1  类摘要 218

8.4.2  用法 219

8.5  空指针处理 220

8.5.1  禁用空指针 220

8.5.2  使用空指针 220

8.5.3  空对象模式 221

8.6  关联指针容器的共通功能 223

8.6.1  类摘要 223

8.6.2  接口解说 224

8.7  集合指针容器适配器 225

8.7.1  配置元函数 225

8.7.2  ptr_set_adapter 226

8.8  ptr_set 227

8.8.1  类摘要 227

8.8.2  用法 228

8.9  ptr_unordered_set 228

8.9.1  类摘要 228

8.9.2  用法 229

8.10  映射指针容器适配器 230

8.10.1  配置元函数 230

8.10.2  ptr_map_adapter 231

8.11  ptr_map 233

8.11.1  类摘要 233

8.11.2  用法 234

8.12  ptr_unordered_map 234

8.12.1  类摘要 235

8.12.2  用法 235

8.13  使用assign库 236

8.13.1  向容器添加元素 236

8.13.2  初始化容器元素 237

8.14  使用算法 238

8.14.1  标准算法 238

8.14.2  序列指针容器的算法 242

8.14.3  关联指针容器的算法 244

8.15  其他议题 246

8.15.1  异常 247

8.15.2  间接函数对象 247

8.15.3  插入迭代器 248

8.15.4  使用视图分配器 248

8.15.5  可克隆性的再讨论 249

8.16  总结 250

第9章  侵入式容器 251

9.1  概述 251

9.1.1  手工实现链表 252

9.1.2  intrusive库介绍 253

9.2  入门示例 254

9.2.1  使用基类挂钩 254

9.2.2  使用成员挂钩 255

9.3  基本概念 257

9.3.1  节点 257

9.3.2  节点特征 258

9.3.3  节点算法 258

9.3.4  值特征 260

9.3.5  挂钩 260

9.3.6  选项 262

9.3.7  处置器 263

9.3.8  克隆 264

9.4  链表 264

9.4.1  节点和算法 265

9.4.2  基类挂钩 266

9.4.3  成员挂钩 267

9.4.4  类摘要 267

9.4.5  基本用法 269

9.4.6  特有用法 271

9.5  有序集合 275

9.5.1  节点和算法 275

9.5.2  基类挂钩 276

9.5.3  成员挂钩 277

9.5.4  set类摘要 277

9.5.5  基本用法 279

9.5.6  特有用法 280

9.6  无序集合 282

9.6.1  节点和算法 282

9.6.2  基类挂钩 283

9.6.3  成员挂钩 284

9.6.4  类摘要 284

9.6.5  基本用法 286

9.6.6  unordered_set的特有用法 288

9.7  其他议题 290

9.7.1  链接模式 290

9.7.2  同时使用多个挂钩 291

9.7.3  万能挂钩 293

9.8  总结 293

第10章  多索引容器 295

10.1  概述 295

10.2  入门示例 296

10.2.1  简单的例子 296

10.2.2  复杂的例子 297

10.2.3  更复杂的例子 299

10.3  基本概念 302

10.3.1  索引 302

10.3.2  索引说明 303

10.3.3  键提取器 304

10.3.4  索引说明列表 304

10.3.5  索引标签 305

10.3.6  多索引容器 305

10.4  键提取器 306

10.4.1  定义 306

10.4.2  identity 307

10.4.3  member 308

10.4.4  const_mem_fun 310

10.4.5  mem_fun 311

10.4.6  global_fun 312

10.4.7  自定义键提取器 313

10.5  序列索引 313

10.5.1  索引说明 313

10.5.2  类摘要 314

10.5.3  用法 315

10.6  随机访问索引 317

10.6.1  索引说明 317

10.6.2  类摘要 317

10.6.3  用法 318

10.7  有序索引 320

10.7.1  索引说明 320

10.7.2  类摘要 320

10.7.3  基本用法 322

10.7.4  高级用法 323

10.8  散列索引 326

10.8.1  索引说明 326

10.8.2  类摘要 326

10.8.3  用法 327

10.9  修改元素 329

10.9.1  替换元素 329

10.9.2  修改元素 330

10.9.3  修改键 332

10.10  多索引容器 333

10.10.1  类摘要 333

10.10.2  用法 334

10.11  组合索引键 337

10.11.1  类摘要 337

10.11.2  用法 338

10.11.3  辅助工具 339

10.12  总结 341

第11章  流处理 343

11.1  概述 343

11.1.1  标准库的流处理 343

11.1.2  Boost的流处理 345

11.2  入门示例 346

11.2.1  示例1 346

11.2.2  示例2 347

11.3  设备的特征 349

11.3.1  设备的字符类型 349

11.3.2  设备的模式 349

11.3.3  设备的分类 350

11.4  设备 351

11.4.1  概述 351

11.4.2  数组设备 352

11.4.3  标准容器设备 354

11.4.4  文件设备 355

11.4.5  空设备 357

11.5  过滤器 358

11.5.1  概述 358

11.5.2  设备链和管道 359

11.5.3  计数过滤器 361

11.5.4  换行过滤器 362

11.5.5  正则表达式过滤器(Ⅰ) 364

11.5.6  正则表达式过滤器(Ⅱ) 366

11.5.7  压缩过滤器 368

11.6  流 369

11.6.1  基本流 370

11.6.2  过滤流 371

11.7  流处理函数 373

11.8  定制设备 374

11.8.1  定制源设备 374

11.8.2  定制接收设备 377

11.9  定制过滤器 377

11.9.1  过滤器的实现原理 378

11.9.2  aggregate_filter 379

11.9.3  basic_line_filter 380

11.9.4  手工打造过滤器 381

11.10  组合设备 385

11.10.1  combine 385

11.10.2  compose 386

11.10.3  invert 387

11.10.4  restrict 389

11.10.5  tee 390

11.11  其他议题 391

11.11.1  对象的生存周期 391

11.11.2  与迭代器的比较 391

11.12  总结 392

第12章  泛型编程 395

12.1  enable_if 395

12.1.1  类摘要 396

12.1.2  应用于模板函数 397

12.1.3  应用于模板类 398

12.1.4  对比C++11标准 399

12.2  call_traits 399

12.2.1  类摘要 399

12.2.2  用法 400

12.2.3  实现原理 402

12.3  concept_check 403

12.3.1  概述 404

12.3.2  基本概念检查 405

12.3.3  函数对象概念检查 405

12.3.4  标准迭代器概念检查 406

12.3.5  新式迭代器概念检查 407

12.3.6  容器概念检查 409

12.3.7  区间概念检查 411

12.3.8  在函数声明中的概念检查 411

12.3.9  概念原型类 413

12.4  总结 414

第13章  模板元编程 415

13.1  概述 415

13.2  整数类型 416

13.2.1  简介 416

13.2.2  整数类型 418

13.2.3  bool类型 419

13.2.4  基本运算 419

13.3  流程控制 421

13.3.1  if_和if_c 421

13.3.2  eval_if和eval_if_c 422

13.4  容器 423

13.4.1  简介 424

13.4.2  vector 425

13.4.3  string 426

13.4.4  map 427

13.4.5  相关元函数 428

13.5  迭代器 429

13.5.1  简介 429

13.5.2  相关元函数 430

13.6  算法 431

13.6.1  插入器 431

13.6.2  查询算法 432

13.6.3  变换算法 433

13.6.4  运行时算法 434

13.7  高级用法 435

13.7.1  高阶元数据 436

13.7.2  占位符 437

13.7.3  bind表达式 437

13.7.4  lambda表达式 438

13.7.5  算法的高级应用 439

13.8  断言 441

13.8.1  基本断言 442

13.8.2  否定断言 442

13.8.3  关系断言 443

13.8.4  定制消息的断言 443

13.9  实例研究 444

13.9.1  泛型编程版本 444

13.9.2  元编程第1版 446

13.9.3  元编程第2版 449

13.10  总结 450

第14章  预处理元编程 453

14.1  概述 453

14.1.1  元数据 454

14.1.2  基本语法 454

14.1.3  特殊符号 456

14.1.4  特殊操作符 456

14.2  整数运算 457

14.3  常用元函数 458

14.3.1  ASSERT 458

14.3.2  IF 459

14.3.3  ENUM 459

14.3.4  REPEAT 460

14.4  高级数据结构 461

14.5  总结 462

第15章  现代C++开发浅谈 463

15.1  基本原则 463

15.2  内存管理 467

15.3  容器、迭代器和算法 468

15.4  其他 469

15.5  结束语 471

附录A  推荐书目 473

附录B  Boost程序库组件索引 475

附录C  Boost程序库安装简介 485

??

??

??

??

XX

  

XIX

C++11/14高级编程——Boost程序库探秘(第3版)

C++11/14高级编程——Boost程序库探秘(第3版)

C++11/14高级编程——Boost程序库探秘(第3版)

作者简介

编辑推荐

紧跟C++最新11/14标准,详细讲解最新特性,

深入探讨"准标准库"——Boost程序库里的迭代器、函数对象、流处理、模板元编程和预处理元编程等高级组件

实用性强,帮助读者深层次地理解掌握现代C++的高级技术和Boost的内部实现机制及用法。

内容丰富、组织得当、概念清晰、讲解细致,是广大C++程序员和爱好者的必备好书。

作者寄语

电子资料

www.luweidong.cn

下一个