C++程序设计语言(第4版)(上、下册)

978-7-115-66614-7
作者: [丹]比亚内·斯特劳斯特鲁普(Bjarne Stroustrup)
译者: 何荣华王文斌李畅高博丁泽纬何琪辰
编辑: 郭泳泽

图书目录:

上册

第 1篇 引言

第 1章 致读者  2

 1.1 本书结构  2

  1.1.1 导言  2

  1.1.2 基本特性  3

  1.1.3 抽象机制  3

  1.1.4 标准库  4

  1.1.5 示例和参考文献  4

 1.2 C++的设计  5

  1.2.1 编程风格  6

  1.2.2 类型检查  8

  1.2.3 C语言兼容性  9

  1.2.4 语言、库和系统  9

 1.3 学习C++  10

  1.3.1 用C++编程  11

  1.3.2 对C++程序员的建议  12

  1.3.3 对C程序员的建议  12

  1.3.4 对Java程序员的建议  13

 1.4 C++的发展历程  14

  1.4.1 大事年表  14

  1.4.2 早期的C++  15

  1.4.3 1998标准  16

  1.4.4 2011标准  17

  1.4.5 C++的用途  19

 1.5 建议  20

 1.6 参考资料  21

第 2章 C++之旅:基础知识  24

 2.1 导言  24

 2.2 基础知识  24

  2.2.1 Hello, World!  25

  2.2.2 类型、变量和算术运算  26

  2.2.3 常量  28

  2.2.4 测试和循环  28

  2.2.5 指针、数组和循环  29

 2.3 用户自定义类型  31

  2.3.1 结构体  31

  2.3.2 类  32

  2.3.3 枚举  33

 2.4 模块化  34

  2.4.1 单独编译  35

  2.4.2 命名空间  36

  2.4.3 错误处理  37

 2.5 后记  39

 2.6 建议  39

第3章 C++之旅:抽象机制  40

 3.1 导言  40

 3.2 类  40

  3.2.1 具体类型  41

  3.2.2 抽象类型  44

  3.2.3 虚函数  46

  3.2.4 类层次结构  46

 3.3 复制和移动  50

  3.3.1 复制容器  50

  3.3.2 移动容器  51

  3.3.3 资源管理  53

  3.3.4 禁用操作  53

 3.4 模板  54

  3.4.1 参数化类型  54

  3.4.2 函数模板  55

  3.4.3 函数对象  56

  3.4.4 可变参数模板  58

  3.4.5 别名  58

 3.5 建议  59

第4章 C++之旅:容器和算法  60

 4.1 库  60

  4.1.1 标准库概述  60

  4.1.2 标准库头文件和命名空间  61

 4.2 字符串  62

 4.3 I/O流  63

  4.3.1 输出  63

  4.3.2 输入  64

  4.3.3 用户自定义类型I/O  65

 4.4 容器  66

  4.4.1 vector  66

  4.4.2 list  68

  4.4.3 map  69

  4.4.4 unordered_map  70

  4.4.5 容器概述  70

 4.5 算法  71

  4.5.1 使用迭代器  72

  4.5.2 迭代器类型  73

  4.5.3 流迭代器  74

  4.5.4 谓词  75

  4.5.5 算法概述  76

  4.5.6 容器算法  76

 4.6 建议  77

第5章 C++之旅:并发与实用工具  78

 5.1 导言  78

 5.2 资源管理  78

  5.2.1 unique_ptr和shared_ptr  79

 5.3 并发处理  80

  5.3.1 任务和线程  80

  5.3.2 传递参数  81

  5.3.3 返回结果  82

  5.3.4 共享数据  82

  5.3.5 任务间通信  84

 5.4 小型实用组件  86

  5.4.1 时间处理  87

  5.4.2 类型函数  87

  5.4.3 对组和元组  89

 5.5 正则表达式  90

 5.6 数值计算  90

  5.6.1 数学函数和算法  90

  5.6.2 复数  91

  5.6.3 随机数  91

  5.6.4 向量运算  92

  5.6.5 数值限制  93

 5.7 建议  93

第 2篇 基本特征

第6章 类型和声明  96

 6.1 ISO C++标准  96

  6.1.1 实现  97

  6.1.2 基本源代码字符集  97

 6.2 类型  97

  6.2.1 基本类型  98

  6.2.2 布尔类型  98

  6.2.3 字符类型  99

  6.2.4 整数类型  102

  6.2.5 浮点类型  104

  6.2.6 前缀和后缀  104

  6.2.7 void  105

  6.2.8 大小  105

  6.2.9 对齐  107

 6.3 声明  107

  6.3.1 声明的结构  109

  6.3.2 声明多个名称  110

  6.3.3 名称  110

  6.3.4 作用域  111

  6.3.5 初始化  113

  6.3.6 类型推断:auto和decltype()  116

 6.4 对象与值  118

  6.4.1 左值与右值  118

  6.4.2 对象的生命周期  118

 6.5 类型别名  119

 6.6 建议  120

第7章 指针、数组与引用  121

 7.1 导言  121

 7.2 指针  121

  7.2.1 void*  122

  7.2.2 nullptr  122

 7.3 数组  123

  7.3.1 数组初始化器  124

  7.3.2 字符串字面量  124

 7.4 指针与数组  127

  7.4.1 访问数组  127

  7.4.2 多维数组  129

  7.4.3 传递数组  130

 7.5 指针与const  131

 7.6 指针与所有权  133

 7.7 引用  133

  7.7.1 左值引用  134

  7.7.2 右值引用  137

  7.7.3 引用的引用  139

  7.7.4 指针与引用  139

 7.8 建议  141

第8章 结构体、联合体与枚举  142

 8.1 导言  142

 8.2 结构体  142

  8.2.1 struct的布局  143

  8.2.2 struct的名称  144

  8.2.3 结构体与类  145

  8.2.4 结构体与数组  146

  8.2.5 类型等价  148

  8.2.6 普通旧数据  149

  8.2.7 域  150

 8.3 联合体  151

  8.3.1 联合体与类  152

  8.3.2 匿名union  153

 8.4 枚举  155

  8.4.1 enum class  155

  8.4.2 普通enum  158

  8.4.3 未命名enum  159

 8.5 建议  159

第9章 语句  160

 9.1 导言  160

 9.2 语句概述  160

 9.3 声明作为语句  161

 9.4 选择语句  162

  9.4.1 if语句  162

  9.4.2 switch语句  163

  9.4.3 条件中的声明  165

 9.5 循环语句  166

  9.5.1 范围for语句  166

  9.5.2 for语句  167

  9.5.3 while语句  168

  9.5.4 do语句  168

  9.5.5 循环退出  168

 9.6 goto语句  169

 9.7 注释与缩进  169

 9.8 建议  171

第 10章 表达式  172

 10.1 导言  172

 10.2 桌面计算器示例  172

  10.2.1 语法分析器  172

  10.2.2 输入  176

  10.2.3 底层输入  179

  10.2.4 错误处理  179

  10.2.5 驱动程序  180

  10.2.6 头文件  180

  10.2.7 命令行参数  181

  10.2.8 编程风格  182

 10.3 运算符概述  182

  10.3.1 结果  185

  10.3.2 求值顺序  186

  10.3.3 运算符优先级  186

  10.3.4 临时对象  187

 10.4 常量表达式  188

  10.4.1 符号常量  189

  10.4.2 常量表达式中的const  189

  10.4.3 字面量类型  190

  10.4.4 引用参数  190

  10.4.5 地址常量表达式  191

 10.5 隐式类型转换  191

  10.5.1 提升  191

  10.5.2 类型转换  192

  10.5.3 常规算术类型转换  194

 10.6 建议  194

第 11章 选择操作  195

 11.1 其他运算符  195

  11.1.1 逻辑运算符  195

  11.1.2 位逻辑运算符  195

  11.1.3 条件表达式  196

  11.1.4 递增与递减  197

 11.2 自由存储区  198

  11.2.1 内存管理  199

  11.2.2 数组  201

  11.2.3 获取内存空间  202

  11.2.4 重载new  203

 11.3 列表  204

  11.3.1 实现模型  205

  11.3.2 限定列表  206

  11.3.3 未限定列表  206

 11.4 lambda表达式  208

  11.4.1 实现模型  208

  11.4.2 lambda的替代  209

  11.4.3 捕获  210

  11.4.4 调用与返回  212

  11.4.5 lambda的类型  213

 11.5 显式类型转换  213

  11.5.1 构造  214

  11.5.2 命名转换  216

  11.5.3 C风格转换  217

  11.5.4 函数风格转换  217

 11.6 建议  217

第 12章 函数  218

 12.1 函数声明  218

  12.1.1 为什么使用函数  218

  12.1.2 函数声明的组成  219

  12.1.3 函数定义  219

  12.1.4 返回值  220

  12.1.5 inline函数  222

  12.1.6 constexpr函数  222

  12.1.7 带有[[noreturn]]的函数  224

  12.1.8 局部变量  224

 12.2 参数传递  225

  12.2.1 引用参数  226

  12.2.2 数组参数  227

  12.2.3 列表参数  228

  12.2.4 未定数量的参数  230

  12.2.5 默认参数  232

 12.3 重载函数  233

  12.3.1 自动重载解析  234

  12.3.2 重载与返回类型  235

  12.3.3 重载与作用域  235

  12.3.4 多实参解析  236

  12.3.5 手动重载解析  236

 12.4 前置与后置条件  237

 12.5 函数指针  238

 12.6 宏  241

  12.6.1 条件编译  244

  12.6.2 预定义宏  244

  12.6.3 编译指令  245

 12.7 建议  245

第 13章 异常处理  246

 13.1 错误处理  246

  13.1.1 异常  246

  13.1.2 传统的错误处理  247

  13.1.3 应付过去  248

  13.1.4 异常的替代观点  249

  13.1.5 何时不能使用异常  249

  13.1.6 层次化错误处理  250

  13.1.7 异常与效率  251

 13.2 异常保证  252

 13.3 资源管理  253

  13.3.1 finally  256

 13.4 强制不变式  257

 13.5 抛出和捕获异常  260

  13.5.1 抛出异常  260

  13.5.2 捕获异常  263

  13.5.3 异常与线程  268

 13.6 vector的实现  268

  13.6.1 一个简单的vector  268

  13.6.2 显式表示内存  271

  13.6.3 赋值  273

  13.6.4 改变大小  275

 13.7 建议  277

第 14章 命名空间  278

 14.1 组合问题  278

 14.2 命名空间  279

  14.2.1 显式限定  280

  14.2.2 using声明  281

  14.2.3 using指令  282

  14.2.4 参数依赖查找  283

  14.2.5 命名空间是开放的  284

 14.3 模块化与接口  285

  14.3.1 命名空间作为模块  286

  14.3.2 实现  287

  14.3.3 接口和实现  289

 14.4 使用命名空间组合代码  290

  14.4.1 便利性与安全性  290

  14.4.2 命名空间别名  291

  14.4.3 组合命名空间  291

  14.4.4 组合与选择  292

  14.4.5 命名空间与重载  293

  14.4.6 版本控制  295

  14.4.7 嵌套命名空间  297

  14.4.8 未命名命名空间  297

  14.4.9 C头文件  298

 14.5 建议  299

第 15章 源文件与程序  300

 15.1 单独编译  300

 15.2 链接  301

  15.2.1 文件局部名称  303

  15.2.2 头文件  303

  15.2.3 单一定义规则  304

  15.2.4 标准库头文件  306

  15.2.5 链接非C++代码  307

  15.2.6 链接与函数指针  308

 15.3 使用头文件  309

  15.3.1 单头文件组织  309

  15.3.2 多头文件组织  312

  15.3.3 包含保护  315

 15.4 程序  316

  15.4.1 非局部变量初始化  316

  15.4.2 初始化与并发  317

  15.4.3 程序终止  317

 15.5 建议  318

第3篇 抽象机制

第 16章 类  320

 16.1 导言  320

 16.2 类的基本概念  321

  16.2.1 成员函数  321

  16.2.2 默认复制  322

  16.2.3 访问控制  322

  16.2.4 类和结构体  323

  16.2.5 构造函数  324

  16.2.6 显式构造函数  326

  16.2.7 类内初始化器  328

  16.2.8 类内函数定义  328

  16.2.9 可变性  329

  16.2.10 自引用  331

  16.2.11 成员访问  333

  16.2.12 静态成员  334

  16.2.13 成员类型  335

 16.3 具体类  336

  16.3.1 成员函数  338

  16.3.2 辅助函数  340

  16.3.3 重载运算符  341

  16.3.4 具体类的意义  342

 16.4 建议  343

第 17章 构造、清理、复制和移动  344

 17.1 导言  344

 17.2 构造函数和析构函数  345

  17.2.1 构造函数和不变式  346

  17.2.2 析构函数和资源  347

  17.2.3 基类和成员析构函数  348

  17.2.4 调用构造函数和析构函数  348

  17.2.5 虚析构函数  349

 17.3 类对象初始化  350

  17.3.1 不使用构造函数进行初始化  350

  17.3.2 使用构造函数进行初始化  351

  17.3.3 默认构造函数  353

  17.3.4 初始化器列表构造函数  355

 17.4 成员初始化和基类初始化  358

  17.4.1 成员初始化  359

  17.4.2 基类初始化器  360

  17.4.3 委托构造函数  360

  17.4.4 类内初始化器  361

  17.4.5 static成员初始化  363

 17.5 复制和移动  364

  17.5.1 复制  364

  17.5.2 移动  369

 17.6 生成默认操作  372

  17.6.1 显式声明默认操作  372

  17.6.2 默认操作  373

  17.6.3 使用默认操作  373

  17.6.4 使用delete删除的函数  376

 17.7 建议  378

第 18章 运算符重载  379

 18.1 导言  379

 18.2 运算符函数  380

  18.2.1 二元和一元运算符  381

  18.2.2 运算符的预置含义  382

  18.2.3 运算符和用户自定义类型  382

  18.2.4 传递对象  383

  18.2.5 命名空间中的运算符  383

 18.3 复数类型  385

  18.3.1 成员和非成员运算符  385

  18.3.2 混合模式运算  386

  18.3.3 类型转换  387

  18.3.4 字面量  389

  18.3.5 访问函数  390

  18.3.6 辅助函数  390

 18.4 类型转换  391

  18.4.1 类型转换运算符  391

  18.4.2 显式类型转换运算符  393

  18.4.3 歧义  393

 18.5 建议  394

第 19章 特殊运算符  396

 19.1 导言  396

 19.2 特殊运算符  396

  19.2.1 取下标  396

  19.2.2 函数调用  397

  19.2.3 解引用  398

  19.2.4 自增和自减  400

  19.2.5 分配和释放  401

  19.2.6 用户自定义字面量  402

 19.3 字符串类  405

  19.3.1 基本操作  405

  19.3.2 访问字符  406

  19.3.3 类的表示  407

  19.3.4 成员函数  409

  19.3.5 辅助函数  410

  19.3.6 应用String  412

 19.4 友元  413

  19.4.1 发现友元  414

  19.4.2 友元与成员  415

 19.5 建议  416

第 20章 派生类  417

 20.1 导言  417

 20.2 派生类  418

  20.2.1 成员函数  419

  20.2.2 构造函数和析构函数  420

 20.3 类层次结构  421

  20.3.1 类型域  421

  20.3.2 虚函数  423

  20.3.3 显式限定  425

  20.3.4 覆盖控制  425

  20.3.5 using基类成员  428

  20.3.6 返回类型放宽  431

 20.4 抽象类  432

 20.5 访问控制  434

  20.5.1 受保护成员  436

  20.5.2 访问基类  437

  20.5.3 using声明和访问控制  438

 20.6 成员指针  439

  20.6.1 函数成员指针  439

  20.6.2 数据成员指针  441

  20.6.3 基类和派生类成员  441

 20.7 建议  442

第 21章 类层次结构  443

 21.1 导言  443

 21.2 类层次结构的设计  443

  21.2.1 实现继承  443

  21.2.2 接口继承  446

  21.2.3 替代实现  447

  21.2.4 定位对象创建  450

 21.3 多重继承  451

  21.3.1 多重接口  451

  21.3.2 多重实现类  451

  21.3.3 消除歧义  453

  21.3.4 重复使用基类  455

  21.3.5 虚基类  456

  21.3.6 重复基类与虚基类  460

 21.4 建议  462

下册

第 22章 运行时类型信息  463

 22.1 导言  463

 22.2 类层次结构导航  463

  22.2.1 dynamic_cast  464

  22.2.2 多重继承  466

  22.2.3 static_cast和dynamic_cast  467

  22.2.4 恢复接口  468

 22.3 双重分发和访问者  471

  22.3.1 双重分发  472

  22.3.2 访问者  473

 22.4 构造和析构  475

 22.5 类型识别  475

  22.5.1 扩展类型信息  477

 22.6 RTII的使用和误用  478

 22.7 建议  479

第 23章 模板  480

 23.1 介绍与概述  480

 23.2 一个简单字符串模板  481

  23.2.1 定义模板  483

  23.2.2 模板实例化  484

 23.3 类型检查  484

  23.3.1 类型等价性  485

  23.3.2 错误检测  486

 23.4 类模板成员  487

  23.4.1 数据成员  487

  23.4.2 成员函数  487

  23.4.3 成员类型别名  487

  23.4.4 静态成员  488

  23.4.5 成员类型  488

  23.4.6 成员模板  489

  23.4.7 友元  492

 23.5 函数模板  493

  23.5.1 函数模板实参  495

  23.5.2 函数模板实参推断  496

  23.5.3 函数模板重载  498

 23.6 模板别名  501

 23.7 源代码组织  502

  23.7.1 链接  503

 23.8 建议  504

第 24章 泛型编程  505

 24.1 导言  505

 24.2 算法和提升  506

 24.3 概念  508

  24.3.1 探索概念  509

  24.3.2 概念和约束  511

 24.4 具体化概念  512

  24.4.1 公理  514

  24.4.2 多实参概念  515

  24.4.3 值概念  516

  24.4.4 约束检查  517

  24.4.5 模板定义检查  517

 24.5 建议  519

第 25章 特化  520

 25.1 导言  520

 25.2 模板形参和实参  520

  25.2.1 类型作为实参  521

  25.2.2 值作为实参  522

  25.2.3 操作作为实参  523

  25.2.4 模板作为实参  525

  25.2.5 默认模板实参  525

 25.3 特化  527

  25.3.1 接口特化  528

  25.3.2 主模板  530

  25.3.3 特化顺序  531

  25.3.4 函数模板特化  531

 25.4 建议  533

第 26章 实例化  534

 26.1 导言  534

 26.2 模板实例化  534

  26.2.1 何时需要实例化  535

  26.2.2 手动控制实例化  536

 26.3 名称绑定  537

  26.3.1 依赖名称  538

  26.3.2 定义点绑定  539

  26.3.3 实例化点绑定  540

  26.3.4 多实例化点  542

  26.3.5 模板和命名空间  543

  26.3.6 过于激进的ADL  543

  26.3.7 来自基类的名称  545

 26.4 建议  547

第 27章 模板和层次结构  548

 27.1 导言  548

 27.2 参数化和层次结构  548

  27.2.1 生成类型  550

  27.2.2 模板类型转换  551

 27.3 类模板层次结构  552

  27.3.1 模板作为接口  553

 27.4 模板参数作为基类  553

  27.4.1 组合数据结构  554

  27.4.2 线性化类层次结构  557

 27.5 建议  561

第 28章 元编程  562

 28.1 导言  562

 28.2 类型函数  563

  28.2.1 类型别名  565

  28.2.2 类型谓词  566

  28.2.3 选择函数  567

  28.2.4 萃取  568

 28.3 控制结构  569

  28.3.1 选择  569

  28.3.2 迭代和递归  572

  28.3.3 何时使用元编程  573

 28.4 条件定义:Enable_if  573

  28.4.1 使用Enable_if  575

  28.4.2 实现Enable_if  576

  28.4.3 Enable_if和概念  576

  28.4.4 更多Enable_if示例  577

 28.5 编译时列表: Tuple  579

  28.5.1 一个简单的输出函数  580

  28.5.2 元素访问  581

  28.5.3 make_tuple  584

 28.6 可变参数模板  584

  28.6.1 一个类型安全的printf()  584

  28.6.2 技术细节  586

  28.6.3 转发  587

  28.6.4 标准库tuple  588

 28.7 国际标准单位示例  591

  28.7.1 Unit  591

  28.7.2 Quantity  592

  28.7.3 Unit字面量  594

  28.7.4 实用函数  594

 28.8 建议  596

第 29章 矩阵设计  597

 29.1 导言  597

  29.1.1 基本矩阵用途  597

  29.1.2 矩阵要求  599

 29.2 矩阵模板  599

  29.2.1 构造和赋值  600

  29.2.2 下标和切片  602

 29.3 矩阵算术运算  604

  29.3.1 标量运算  604

  29.3.2 加法  605

  29.3.3 乘法  606

 29.4 矩阵实现  607

  29.4.1 slice()  607

  29.4.2 矩阵切片  608

  29.4.3 Matrix_ref  609

  29.4.4 矩阵列表初始化  610

  29.4.5 矩阵访问  612

  29.4.6 零维矩阵  614

 29.5 解线性方程  614

  29.5.1 经典高斯消元法  615

  29.5.2 主元选取  616

  29.5.3 测试  616

  29.5.4 熔合运算  617

 29.6 建议  619

第4篇 标准库

第30章 标准库概览  622

 30.1 导言  622

  30.1.1 标准库设施  622

  30.1.2 设计约束  623

  30.1.3 描述风格  624

 30.2 头文件  624

 30.3 语言支持  628

  30.3.1 initializer_list支持  628

  30.3.2 范围for支持  629

 30.4 错误处理  629

  30.4.1 异常  629

  30.4.2 断言  632

  30.4.3 system_error  633

 30.5 建议  640

第31章 STL容器  642

 31.1 导言  642

 31.2 容器概览  642

  31.2.1 容器表示  644

  31.2.2 元素要求  645

 31.3 操作概览  647

  31.3.1 成员类型  649

  31.3.2 构造函数、析构函数和赋值操作  650

  31.3.3 大小和容量  651

  31.3.4 迭代器  651

  31.3.5 元素访问  652

  31.3.6 栈操作  653

  31.3.7 列表操作  653

  31.3.8 其他操作  654

 31.4 容器  654

  31.4.1 vector  654

  31.4.2 链表  657

  31.4.3 关联容器  659

 31.5 容器适配器  667

  31.5.1 stack  668

  31.5.2 queue  669

  31.5.3 priority_queue  669

 31.6 建议  670

第32章 STL算法  672

 32.1 导言  672

 32.2 算法  672

  32.2.1 序列  672

 32.3 策略实参  674

  32.3.1 复杂度  675

 32.4 不修改序列的算法  675

  32.4.1 for_each()  675

  32.4.2 序列谓词  676

  32.4.3 count()  676

  32.4.4 find()  676

  32.4.5 equal()和mismatch()  677

  32.4.6 search()  678

 32.5 修改序列的算法  678

  32.5.1 copy()  679

  32.5.2 unique()  679

  32.5.3 remove()和replace()  680

  32.5.4 rotate()、random_shuffle()和partition()  681

  32.5.5 排列  682

  32.5.6 fill()  682

  32.5.7 swap()  683

 32.6 排序和搜索  683

  32.6.1 二分搜索  685

  32.6.2 merge()  686

  32.6.3 集合算法  687

  32.6.4 堆  688

  32.6.5 lexicographical_compare()  688

 32.7 最小值和最大值  689

 32.8 建议  690

第33章 STL迭代器  691

 33.1 导言  691

  33.1.1 迭代器模型  691

  33.1.2 迭代器类别  692

  33.1.3 迭代器萃取  693

  33.1.4 迭代器操作  695

 33.2 迭代器适配器  696

  33.2.1 反向迭代器  696

  33.2.2 插入迭代器  698

  33.2.3 移动迭代器  699

 33.3 范围访问函数  699

 33.4 函数对象  700

 33.5 函数适配器  701

  33.5.1 bind()  701

  33.5.2 mem_fn()  703

  33.5.3 function  703

 33.6 建议  705

第34章 内存和资源  706

 34.1 导言  706

 34.2 “拟容器”  706

  34.2.1 array  707

  34.2.2 bitset  709

  34.2.3 vector  712

  34.2.4 元组  713

 34.3 资源管理指针  716

  34.3.1 unique_ptr  716

  34.3.2 shared_ptr  719

  34.3.3 weak_ptr  721

 34.4 分配器  723

  34.4.1 默认分配器  724

  34.4.2 分配器萃取  725

  34.4.3 指针萃取  726

  34.4.4 限域的分配器  726

 34.5 垃圾收集接口  728

 34.6 未初始化内存  730

  34.6.1 临时缓冲区  730

  34.6.2 raw_storage_iterator  730

 34.7 建议  731

第35章 工具  732

 35.1 导言  732

 35.2 时间  732

  35.2.1 duration  733

  35.2.2 time_point  735

  35.2.3 时钟  736

  35.2.4 时间萃取  737

 35.3 编译时有理数运算  738

 35.4 类型函数  739

  35.4.1 类型萃取  739

  35.4.2 类型生成器  742

 35.5 更多工具  746

  35.5.1 move()和forward()  747

  35.5.2 swap()  747

  35.5.3 关系运算符  748

  35.5.4 比较和哈希type_info  749

 35.6 建议  749

第36章 字符串  750

 36.1 导言  750

 36.2 字符分类  750

  36.2.1 分类函数  750

  36.2.2 字符萃取  751

 36.3 字符串  752

  36.3.1 string与C风格字符串  753

  36.3.2 构造函数  754

  36.3.3 基本操作  755

  36.3.4 字符串I/O  756

  36.3.5 数值转换  757

  36.3.6 类STL操作  758

  36.3.7 find系列函数  760

  36.3.8 子串  761

 36.4 建议  762

第37章 正则表达式  763

 37.1 正则表达式  763

  37.1.1 正则表达式表示法  764

 37.2 regex  767

  37.2.1 匹配结果  768

  37.2.2 格式化  771

 37.3 正则表达式函数  771

  37.3.1 regex_match()  772

  37.3.2 regex_search()  773

  37.3.3 regex_replace()  774

 37.4 正则表达式迭代器  775

  37.4.1 regex_iterator  775

  37.4.2 regex_token_iterator  776

 37.5 regex_traits  778

 37.6 建议  778

第38章 I/O流  779

 38.1 导言  779

 38.2 I/O流层次结构  781

  38.2.1 文件流  781

  38.2.2 字符串流  782

 38.3 错误处理  784

 38.4 I/O操作  785

  38.4.1 输入操作  785

  38.4.2 输出操作  788

  38.4.3 操纵符  789

  38.4.4 流状态  790

  38.4.5 格式化  794

 38.5 流迭代器  799

 38.6 缓冲  800

  38.6.1 输出流和缓冲区  802

  38.6.2 输入流和缓冲区  803

  38.6.3 缓冲区迭代器  804

 38.7 建议  805

第39章 区域设置  807

 39.1 处理文化差异  807

 39.2 locale类  809

  39.2.1 命名的locale  810

  39.2.2 string的比较  813

 39.3 facet类  813

  39.3.1 访问locale中的facet  814

  39.3.2 一个简单的用户自定义facet  815

  39.3.3 locale和facet的使用  817

 39.4 标准facet  817

  39.4.1 string的比较  819

  39.4.2 数值格式化  821

  39.4.3 货币格式化  825

  39.4.4 日期和时间格式化  829

  39.4.5 字符分类  831

  39.4.6 字符编码转换  834

  39.4.7 消息  837

 39.5 便利接口  840

  39.5.1 字符分类  840

  39.5.2 字符转换  841

  39.5.3 字符串转换  841

  39.5.4 缓冲区转换  842

 39.6 建议  843

第40章 数值  844

 40.1 导言  844

 40.2 数值极限  844

  40.2.1 数值极限宏  846

 40.3 标准数学函数  847

 40.4 complex复数  848

 40.5 数值数组:valarray  849

  40.5.1 构造函数和赋值  849

  40.5.2 下标  851

  40.5.3 运算  852

  40.5.4 切片  854

  40.5.5 slice_array  856

  40.5.6 通用切片  856

 40.6 通用数值算法  857

  40.6.1 accumulate()  858

  40.6.2 inner_product()  859

  40.6.3 partial_sum()与adjacent_difference()  859

  40.6.4 iota()  860

 40.7 随机数  860

  40.7.1 引擎  862

  40.7.2 随机设备  864

  40.7.3 分布  864

  40.7.4 C风格随机数  867

 40.8 建议  868

第41章 并发  869

 41.1 导言  869

 41.2 内存模型  870

  41.2.1 内存位置  870

  41.2.2 指令重排  871

  41.2.3 内存序  872

  41.2.4 数据竞争  873

 41.3 原子性  874

  41.3.1 原子类型  875

  41.3.2 原子标志和栅栏  879

 41.4 volatile  880

 41.5 建议  880

第42章 线程和任务  881

 42.1 导言  881

 42.2 线程  881

  42.2.1 身份  882

  42.2.2 构造  883

  42.2.3 析构  884

  42.2.4 join()  884

  42.2.5 detach()  885

  42.2.6 命名空间this_thread  886

  42.2.7 杀死thread  887

  42.2.8 thread_local数据  887

 42.3 避免数据竞争  888

  42.3.1 互斥量  889

  42.3.2 多重锁  895

  42.3.3 call_once()  896

  42.3.4 条件变量  897

 42.4 基于任务的并发  900

  42.4.1 future和promise  901

  42.4.2 promise  901

  42.4.3 packaged_task  902

  42.4.4 future  905

  42.4.5 shared_future  907

  42.4.6 async()  907

  42.4.7 一个并行find()示例  909

 42.5 建议  911

第43章 C标准库  913

 43.1 导言  913

 43.2 文件  913

 43.3 printf()系列函数  914

 43.4 C风格字符串  916

 43.5 内存  917

 43.6 日期和时间  918

 43.7 其他  921

 43.8 建议  922

第44章 兼容性  923

 44.1 导言  923

 44.2 C++11扩展  923

  44.2.1 语言特性  923

  44.2.2 标准库组件  924

  44.2.3 弃用特性  925

  44.2.4 应对早期C++实现  926

 44.3 C/C++兼容性  926

  44.3.1 C和C++是兄弟  926

  44.3.2 “静默”差异  927

  44.3.3 不兼容C++的C代码  928

  44.3.4 不兼容C的C++代码  930

 44.4 建议  931

详情

C++是一种通用程序设计语言。本书全面介绍C++11标准,涵盖了C++的发展历程、设计理念、学习方法及新特性等内容。第1篇(第1~5章)包括C++的背景知识、C++语言及其标准库的简要介绍;第2篇(第6~15章)介绍C++的内置类型、基本特性及如何用它们构造程序;第3篇(第16~29章)介绍C++的抽象机制及如何用这些机制编写面向对象程序和泛型程序;第4篇(第30~44章)概述标准库并讨论一些兼容性问题。本书从基本原理、规范等方面充分讲解C++的语言特性和标准库组件,并给出丰富的例子,为专业程序员提供全面的C++知识体系。 本书可作为高等院校编程语言和C++相关课程的教材,也适合C++程序设计人员阅读。

图书摘要

相关图书

DeepSeek原理与项目实战大模型部署、微调与应用开发
DeepSeek原理与项目实战大模型部署、微调与应用开发
软件工程3.0:大模型驱动的研发新范式
软件工程3.0:大模型驱动的研发新范式
图机器学习
图机器学习
Vibe Coding:AI 编程时代的认知重构
Vibe Coding:AI 编程时代的认知重构
大模型工程化:AI驱动下的数据体系
大模型工程化:AI驱动下的数据体系
Cursor与MCP快速入门:零基础开发智能体应用
Cursor与MCP快速入门:零基础开发智能体应用

相关文章

相关课程