现代C++编程实战:132个核心技巧示例(原书第2版)

现代C++编程实战:132个核心技巧示例(原书第2版)

查阅电子书
手机扫码
  • 微信扫一扫

    关注微信公众号

因版权原因待上架

编辑推荐

深入理解现代C++的工作原理,全面掌握C++编程实践。

内容简介

本书介绍现代C++标准。内容按照条目的方式编排,每一个条目包含一个特定语言或库的功能,或C++开发人员面临的常见问题及其使用现代C++的典型解决方案。通过130多个条目,读者将学习掌握核心语言功能和标准库,包括字符串、容器、算法、迭代器、流、正则表达式、线程、文件系统、原子操作、实用程序和ranges。

作者简介

作者马里乌斯·班西拉,一名软件工程师,拥有近20年为工业和金融部门开发解决方案的经验。他还是一名软件架构师,专注于微软技术,主要使用C++和C#开发桌面应用程序。他热衷于与他人分享自己的技术专长,自2006年以来,他被评为微软的C++和开发人员技术MVP。

章节目录

版权信息

前言

第1章 现代C++的核心特性

1.1 尽可能地使用auto关键字

1.1.1 使用方式

1.1.2 工作原理

1.1.3 延伸阅读

1.2 创建类型别名和模板别名

1.2.1 使用方式

1.2.2 工作原理

1.2.3 延伸阅读

1.3 理解统一初始化

1.3.1 准备工作

1.3.2 使用方式

1.3.3 工作原理

1.3.4 更多

1.3.5 延伸阅读

1.4 了解各种形式的非静态成员初始化

1.4.1 使用方式

1.4.2 工作原理

1.4.3 延伸阅读

1.5 控制以及查询对象对齐方式

1.5.1 准备工作

1.5.2 使用方式

1.5.3 工作原理

1.5.4 延伸阅读

1.6 使用作用域枚举

1.6.1 使用方式

1.6.2 工作原理

1.6.3 延伸阅读

1.7 在虚方法中使用override和final关键字

1.7.1 准备工作

1.7.2 使用方式

1.7.3 工作原理

1.7.4 延伸阅读

1.8 使用基于range的for循环迭代range

1.8.1 准备工作

1.8.2 使用方式

1.8.3 工作原理

1.8.4 延伸阅读

1.9 对自定义类型使用基于range的for循环

1.9.1 准备工作

1.9.2 使用方式

1.9.3 工作原理

1.9.4 延伸阅读

1.10 使用explicit构造函数和转换操作符来避免隐式转换

1.10.1 准备工作

1.10.2 使用方式

1.10.3 工作原理

1.10.4 延伸阅读

1.11 使用匿名命名空间来代替静态全局空间

1.11.1 准备工作

1.11.2 使用方式

1.11.3 工作原理

1.11.4 延伸阅读

1.12 使用内联命名空间进行符号版本控制

1.12.1 准备工作

1.12.2 使用方式

1.12.3 工作原理

1.12.4 延伸阅读

1.13 使用结构化绑定处理多值返回

1.13.1 准备工作

1.13.2 使用方式

1.13.3 工作原理

1.13.4 更多

1.13.5 延伸阅读

1.14 使用类模板参数推导简化代码

1.14.1 使用方式

1.14.2 工作原理

1.14.3 延伸阅读

第2章 数字和字符串

2.1 在数值类型和字符串类型之间进行转换

2.1.1 准备工作

2.1.2 使用方式

2.1.3 工作原理

2.1.4 延伸阅读

2.2 数值类型的极限和其他属性

2.2.1 准备工作

2.2.2 使用方式

2.2.3 工作原理

2.2.4 延伸阅读

2.3 生成伪随机数

2.3.1 准备工作

2.3.2 使用方式

2.3.3 工作原理

2.3.4 延伸阅读

2.4 初始化伪随机数生成器内部状态的所有位

2.4.1 准备工作

2.4.2 使用方式

2.4.3 工作原理

2.4.4 延伸阅读

2.5 创建cooked的用户自定义字面量

2.5.1 准备工作

2.5.2 使用方式

2.5.3 工作原理

2.5.4 更多

2.5.5 延伸阅读

2.6 创建原始的用户自定义字面量

2.6.1 准备工作

2.6.2 使用方式

2.6.3 工作原理

2.6.4 延伸阅读

2.7 使用原始字符串字面量来避免转义字符

2.7.1 准备工作

2.7.2 使用方式

2.7.3 工作原理

2.7.4 延伸阅读

2.8 创建字符串辅助库

2.8.1 准备工作

2.8.2 使用方式

2.8.3 工作原理

2.8.4 延伸阅读

2.9 使用正则表达式验证字符串的格式

2.9.1 准备工作

2.9.2 使用方式

2.9.3 工作原理

2.9.4 更多

2.9.5 延伸阅读

2.10 使用正则表达式解析字符串的内容

2.10.1 准备工作

2.10.2 使用方式

2.10.3 工作原理

2.10.4 延伸阅读

2.11 使用正则表达式替换字符串的内容

2.11.1 准备工作

2.11.2 使用方式

2.11.3 工作原理

2.11.4 延伸阅读

2.12 使用std::string_view代替常量字符串引用

2.12.1 准备工作

2.12.2 使用方式

2.12.3 工作原理

2.12.4 延伸阅读

2.13 使用std::format格式化文本

2.13.1 准备工作

2.13.2 使用方式

2.13.3 工作原理

2.13.4 延伸阅读

2.14 使用std::format格式化用户自定义类型

2.14.1 准备工作

2.14.2 使用方式

2.14.3 工作原理

2.14.4 延伸阅读

第3章 函数

3.1 实现默认函数和删除函数

3.1.1 准备工作

3.1.2 使用方式

3.1.3 工作原理

3.1.4 延伸阅读

3.2 将lambda与标准算法结合使用

3.2.1 准备工作

3.2.2 使用方式

3.2.3 工作原理

3.2.4 延伸阅读

3.3 使用泛型lambda和模板lambda

3.3.1 准备工作

3.3.2 使用方式

3.3.3 工作原理

3.3.4 延伸阅读

3.4 编写递归lambda

3.4.1 准备工作

3.4.2 使用方式

3.4.3 工作原理

3.4.4 延伸阅读

3.5 编写具有可变数量参数的函数模板

3.5.1 准备工作

3.5.2 使用方式

3.5.3 工作原理

3.5.4 延伸阅读

3.6 使用fold表达式简化可变参数函数模板

3.6.1 准备工作

3.6.2 使用方式

3.6.3 工作原理

3.6.4 更多

3.6.5 延伸阅读

3.7 实现高阶函数map和fold

3.7.1 准备工作

3.7.2 使用方式

3.7.3 工作原理

3.7.4 更多

3.7.5 延伸阅读

3.8 将函数组合成高阶函数

3.8.1 准备工作

3.8.2 使用方式

3.8.3 工作原理

3.8.4 更多

3.8.5 延伸阅读

3.9 统一调用可调用对象

3.9.1 准备工作

3.9.2 使用方式

3.9.3 工作原理

3.9.4 延伸阅读

第4章 预处理和编译

4.1 条件编译源代码

4.1.1 准备工作

4.1.2 使用方式

4.1.3 工作原理

4.1.4 延伸阅读

4.2 使用间接模式进行预处理器的字符串化和连接

4.2.1 准备工作

4.2.2 使用方式

4.2.3 工作原理

4.2.4 延伸阅读

4.3 使用static_assert执行编译时断言检查

4.3.1 准备工作

4.3.2 使用方式

4.3.3 工作原理

4.3.4 延伸阅读

4.4 使用enable_if条件编译类和函数

4.4.1 准备工作

4.4.2 使用方式

4.4.3 工作原理

4.4.4 更多

4.4.5 延伸阅读

4.5 在编译时使用constexpr if选择分支

4.5.1 准备工作

4.5.2 使用方式

4.5.3 工作原理

4.5.4 延伸阅读

4.6 向编译器提供带有属性的元数据

4.6.1 使用方式

4.6.2 工作原理

4.6.3 延伸阅读

第5章 标准库容器、算法和迭代器

5.1 使用vector作为默认容器

5.1.1 准备工作

5.1.2 使用方式

5.1.3 工作原理

5.1.4 延伸阅读

5.2 对固定大小的位序列使用bitset

5.2.1 准备工作

5.2.2 使用方式

5.2.3 工作原理

5.2.4 更多

5.2.5 延伸阅读

5.3 对可变大小的位序列使用vector

5.3.1 准备工作

5.3.2 使用方式

5.3.3 工作原理

5.3.4 更多

5.3.5 延伸阅读

5.4 使用位操作工具

5.4.1 准备工作

5.4.2 使用方式

5.4.3 工作原理

5.4.4 延伸阅读

5.5 在range内查找元素

5.5.1 准备工作

5.5.2 使用方式

5.5.3 工作原理

5.5.4 延伸阅读

5.6 对range进行排序

5.6.1 准备工作

5.6.2 使用方式

5.6.3 工作原理

5.6.4 延伸阅读

5.7 初始化range

5.7.1 准备工作

5.7.2 使用方式

5.7.3 工作原理

5.7.4 延伸阅读

5.8 在range上使用set操作

5.8.1 准备工作

5.8.2 使用方式

5.8.3 工作原理

5.8.4 延伸阅读

5.9 使用迭代器向容器中插入新元素

5.9.1 准备工作

5.9.2 使用方式

5.9.3 工作原理

5.9.4 更多

5.9.5 延伸阅读

5.10 编写自己的随机访问迭代器

5.10.1 准备工作

5.10.2 使用方式

5.10.3 工作原理

5.10.4 更多

5.10.5 延伸阅读

5.11 使用非成员函数访问容器

5.11.1 准备工作

5.11.2 使用方式

5.11.3 工作原理

5.11.4 更多

5.11.5 延伸阅读

第6章 通用工具

6.1 使用chrono::duration表示时间间隔

6.1.1 准备工作

6.1.2 使用方式

6.1.3 工作原理

6.1.4 更多

6.1.5 延伸阅读

6.2 使用日历

6.2.1 准备工作

6.2.2 使用方式

6.2.3 工作原理

6.2.4 更多

6.2.5 延伸阅读

6.3 在时区之间转换时间

6.3.1 准备工作

6.3.2 使用方式

6.3.3 工作原理

6.3.4 延伸阅读

6.4 使用标准时钟测量函数执行时间

6.4.1 准备工作

6.4.2 使用方式

6.4.3 工作原理

6.4.4 延伸阅读

6.5 为自定义类型生成哈希值

6.5.1 准备工作

6.5.2 使用方式

6.5.3 工作原理

6.5.4 延伸阅读

6.6 使用std::any存储任意值

6.6.1 准备工作

6.6.2 使用方式

6.6.3 工作原理

6.6.4 延伸阅读

6.7 使用std::optional存储可选值

6.7.1 准备工作

6.7.2 使用方式

6.7.3 工作原理

6.7.4 延伸阅读

6.8 使用std::variant作为类型安全联合体

6.8.1 准备工作

6.8.2 使用方式

6.8.3 工作原理

6.8.4 更多

6.8.5 延伸阅读

6.9 访问std::variant

6.9.1 准备工作

6.9.2 使用方式

6.9.3 工作原理

6.9.4 延伸阅读

6.10 对连续对象序列使用std::span

6.10.1 准备工作

6.10.2 使用方式

6.10.3 工作原理

6.10.4 延伸阅读

6.11 注册一个在程序正常退出时调用的函数

6.11.1 准备工作

6.11.2 使用方式

6.11.3 工作原理

6.11.4 延伸阅读

6.12 使用类型特征获取类型的属性

6.12.1 准备工作

6.12.2 使用方式

6.12.3 工作原理

6.12.4 更多

6.12.5 延伸阅读

6.13 自定义类型特征

6.13.1 准备工作

6.13.2 使用方式

6.13.3 工作原理

6.13.4 延伸阅读

6.14 使用std::conditional在类型之间进行选择

6.14.1 准备工作

6.14.2 使用方式

6.14.3 工作原理

6.14.4 延伸阅读

第7章 文件和流

7.1 读写原始数据

7.1.1 准备工作

7.1.2 使用方式

7.1.3 工作原理

7.1.4 更多

7.1.5 延伸阅读

7.2 读写对象

7.2.1 准备工作

7.2.2 使用方式

7.2.3 工作原理

7.2.4 延伸阅读

7.3 使用流的本地化设置

7.3.1 准备工作

7.3.2 使用方式

7.3.3 工作原理

7.3.4 延伸阅读

7.4 使用I/O流操作符控制流的输出

7.4.1 准备工作

7.4.2 使用方式

7.4.3 工作原理

7.4.4 延伸阅读

7.5 使用货币I/O流操作符

7.5.1 准备工作

7.5.2 使用方式

7.5.3 工作原理

7.5.4 延伸阅读

7.6 使用时间I/O流操作符

7.6.1 准备工作

7.6.2 使用方式

7.6.3 工作原理

7.6.4 延伸阅读

7.7 使用文件系统路径

7.7.1 准备工作

7.7.2 使用方式

7.7.3 工作原理

7.7.4 延伸阅读

7.8 创建、复制和删除文件及目录

7.8.1 准备工作

7.8.2 使用方式

7.8.3 工作原理

7.8.4 延伸阅读

7.9 从文件中删除内容

7.9.1 准备工作

7.9.2 使用方式

7.9.3 工作原理

7.9.4 延伸阅读

7.10 检查现有文件或目录的属性

7.10.1 准备工作

7.10.2 使用方式

7.10.3 工作原理

7.10.4 延伸阅读

7.11 枚举目录的内容

7.11.1 准备工作

7.11.2 使用方式

7.11.3 工作原理

7.11.4 更多

7.11.5 延伸阅读

7.12 查找文件

7.12.1 准备工作

7.12.2 使用方式

7.12.3 工作原理

7.12.4 延伸阅读

第8章 线程和并发

8.1 线程的使用

8.1.1 准备工作

8.1.2 使用方式

8.1.3 工作原理

8.1.4 延伸阅读

8.2 用互斥量和锁同步访问共享数据

8.2.1 准备工作

8.2.2 使用方式

8.2.3 工作原理

8.2.4 延伸阅读

8.3 避免使用递归互斥量

8.3.1 准备工作

8.3.2 使用方式

8.3.3 工作原理

8.3.4 延伸阅读

8.4 处理线程函数抛出的异常

8.4.1 准备工作

8.4.2 使用方式

8.4.3 工作原理

8.4.4 延伸阅读

8.5 在线程之间发送通知

8.5.1 准备工作

8.5.2 使用方式

8.5.3 工作原理

8.5.4 延伸阅读

8.6 使用promise和future从线程返回值

8.6.1 准备工作

8.6.2 使用方式

8.6.3 工作原理

8.6.4 更多

8.6.5 延伸阅读

8.7 异步执行函数

8.7.1 准备工作

8.7.2 使用方式

8.7.3 工作原理

8.7.4 延伸阅读

8.8 使用原子类型

8.8.1 准备工作

8.8.2 使用方式

8.8.3 工作原理

8.8.4 延伸阅读

8.9 基于线程实现并行map和fold

8.9.1 准备工作

8.9.2 使用方式

8.9.3 工作原理

8.9.4 延伸阅读

8.10 基于任务实现并行map和fold

8.10.1 准备工作

8.10.2 使用方式

8.10.3 工作原理

8.10.4 更多

8.10.5 延伸阅读

8.11 基于标准并行算法实现并行map和fold

8.11.1 准备工作

8.11.2 使用方式

8.11.3 工作原理

8.11.4 更多

8.11.5 延伸阅读

8.12 使用可结合的线程和取消机制

8.12.1 准备工作

8.12.2 使用方式

8.12.3 工作原理

8.12.4 延伸阅读

8.13 使用线程同步机制

8.13.1 准备工作

8.13.2 使用方式

8.13.3 工作原理

8.13.4 延伸阅读

第9章 鲁棒性和性能

9.1 使用异常进行错误处理

9.1.1 准备工作

9.1.2 使用方式

9.1.3 工作原理

9.1.4 更多

9.1.5 延伸阅读

9.2 对于不抛出异常的函数使用noexcept

9.2.1 使用方式

9.2.2 工作原理

9.2.3 更多

9.2.4 延伸阅读

9.3 保证程序的常量正确性

9.3.1 使用方式

9.3.2 工作原理

9.3.3 更多

9.3.4 延伸阅读

9.4 创建编译时常量表达式

9.4.1 准备工作

9.4.2 使用方式

9.4.3 工作原理

9.4.4 更多

9.4.5 延伸阅读

9.5 创建即时函数

9.5.1 使用方式

9.5.2 工作原理

9.5.3 延伸阅读

9.6 执行正确类型转换

9.6.1 使用方式

9.6.2 工作原理

9.6.3 更多

9.6.4 延伸阅读

9.7 使用unique_ptr拥有单独的内存资源

9.7.1 准备工作

9.7.2 使用方式

9.7.3 工作原理

9.7.4 延伸阅读

9.8 使用shared_ptr共享内存资源

9.8.1 准备工作

9.8.2 使用方式

9.8.3 工作原理

9.8.4 延伸阅读

9.9 实现移动语义

9.9.1 准备工作

9.9.2 使用方式

9.9.3 工作原理

9.9.4 更多

9.9.5 延伸阅读

9.10 基于operator<=>的一致性比较

9.10.1 准备工作

9.10.2 使用方式

9.10.3 工作原理

9.10.4 延伸阅读

第10章 模式和惯用法

10.1 在工厂模式中避免重复的if...else语句

10.1.1 准备工作

10.1.2 使用方式

10.1.3 工作原理

10.1.4 更多

10.1.5 延伸阅读

10.2 实现pimpl惯用法

10.2.1 准备工作

10.2.2 使用方式

10.2.3 工作原理

10.2.4 更多

10.2.5 延伸阅读

10.3 实现命名参数惯用法

10.3.1 准备工作

10.3.2 使用方式

10.3.3 工作原理

10.3.4 延伸阅读

10.4 基于非虚接口惯用法将接口与实现分离

10.4.1 准备工作

10.4.2 使用方式

10.4.3 工作原理

10.4.4 延伸阅读

10.5 用律师与委托人惯用法处理友元

10.5.1 准备工作

10.5.2 使用方式

10.5.3 工作原理

10.5.4 延伸阅读

10.6 基于奇异递归模板模式的静态多态

10.6.1 准备工作

10.6.2 使用方式

10.6.3 工作原理

10.6.4 更多

10.6.5 延伸阅读

10.7 实现线程安全单例

10.7.1 准备工作

10.7.2 使用方式

10.7.3 工作原理

10.7.4 更多

10.7.5 延伸阅读

第11章 测试框架

11.1 开始使用Boost.Test

11.1.1 准备工作

11.1.2 使用方式

11.1.3 工作原理

11.1.4 更多

11.1.5 延伸阅读

11.2 基于Boost.Test编写和运行测试

11.2.1 准备工作

11.2.2 使用方式

11.2.3 工作原理

11.2.4 延伸阅读

11.3 基于Boost.Test的断言

11.3.1 准备工作

11.3.2 使用方式

11.3.3 工作原理

11.3.4 延伸阅读

11.4 基于Boost.Test使用测试固件

11.4.1 准备工作

11.4.2 使用方式

11.4.3 工作原理

11.4.4 延伸阅读

11.5 基于Boost.Test控制输出

11.5.1 准备工作

11.5.2 使用方式

11.5.3 工作原理

11.5.4 更多

11.5.5 延伸阅读

11.6 开始使用Google Test

11.6.1 准备工作

11.6.2 使用方式

11.6.3 工作原理

11.6.4 更多

11.6.5 延伸阅读

11.7 基于Google Test编写和运行测试

11.7.1 准备工作

11.7.2 使用方式

11.7.3 工作原理

11.7.4 延伸阅读

11.8 基于Google Test的断言

11.8.1 使用方式

11.8.2 工作原理

11.8.3 延伸阅读

11.9 基于Google Test使用测试固件

11.9.1 准备工作

11.9.2 使用方式

11.9.3 工作原理

11.9.4 延伸阅读

11.10 基于Google Test控制输出

11.10.1 准备工作

11.10.2 使用方式

11.10.3 工作原理

11.10.4 延伸阅读

11.11 开始使用Catch2

11.11.1 准备工作

11.11.2 使用方式

11.11.3 工作原理

11.11.4 更多

11.11.5 延伸阅读

11.12 基于Catch2编写和运行测试

11.12.1 使用方式

11.12.2 工作原理

11.12.3 延伸阅读

11.13 基于Catch2的断言

11.13.1 准备工作

11.13.2 使用方式

11.13.3 工作原理

11.13.4 延伸阅读

11.14 基于Catch2控制输出

11.14.1 准备工作

11.14.2 使用方式

11.14.3 工作原理

11.14.4 延伸阅读

第12章 C++20核心特性

12.1 模块的使用

12.1.1 准备工作

12.1.2 使用方式

12.1.3 工作原理

12.1.4 延伸阅读

12.2 理解模块分区

12.2.1 准备工作

12.2.2 使用方式

12.2.3 工作原理

12.2.4 更多

12.2.5 延伸阅读

12.3 基于概念指定模板参数要求

12.3.1 准备工作

12.3.2 使用方式

12.3.3 工作原理

12.3.4 更多

12.3.5 延伸阅读

12.4 使用要求表达式和要求条款

12.4.1 准备工作

12.4.2 使用方式

12.4.3 工作原理

12.4.4 延伸阅读

12.5 基于range库遍历集合

12.5.1 准备工作

12.5.2 使用方式

12.5.3 工作原理

12.5.4 更多

12.5.5 延伸阅读

12.6 创建你自己的range视图

12.6.1 准备工作

12.6.2 使用方式

12.6.3 工作原理

12.6.4 延伸阅读

12.7 为异步计算创建协程任务类型

12.7.1 准备工作

12.7.2 使用方式

12.7.3 工作原理

12.7.4 更多

12.7.5 延伸阅读

12.8 为序列值创建协程生成器类型

12.8.1 准备工作

12.8.2 使用方式

12.8.3 工作原理

12.8.4 更多

12.8.5 延伸阅读

参考资料

现代C++编程实战:132个核心技巧示例(原书第2版)是2024年由机械工业出版社出版,作者[罗] 马里乌斯·班西拉。

得书感谢您对《现代C++编程实战:132个核心技巧示例(原书第2版)》关注和支持,如本书内容有不良信息或侵权等情形的,请联系本网站。

购买这本书

你可能喜欢
小学生C++创意编程 电子书
&amp;middot;利用故事情境引发学生思考,既独具匠心又妙趣横生。&amp;middot;利用流程图厘清思路,激发学生的学习兴趣,培养计算思维。&amp;middot;通过探究与实践,让学生在解决问题的过程中体会到编程的乐趣和魅力。&amp;middot;通过不同的练习,思考解决问题的不同方法。&amp;middot;附赠案例素材、源文件、视频微课,手机扫码轻松观看教学视频,具体方式详见本书前言部分。
中学生C++创意编程 电子书
本书采用单元和课的形式,通过30个寓教于乐且贴近中学生的学习和生活、符合中学生认知的编程案例,帮助中学生学习和掌握C++的编程思维和方法。本书利用流程图厘清编程思路,进而剖析解决问题必需的C++知识,包括常量、变量、顺序结构、选择结构、循环结构、数组、函数、文件操作、算法等。在此过程中,学生可以通过探索体会编程的乐趣和魅力,并学会运用计算思维来解决问题。本书适合中学生自主学习使用,可作为青少年编程
Java EE核心框架实战(第2版) 电子书
本书宗旨 提高读者学习Java EE的效率,增强其项目实战能力。本书摒弃了软件公司中不常用或不实用的技术,而是采用近200个开发案例,为读者讲解了开发商业软件的知识,帮助读者进行“精要”式的学习,汲取Java EE的思想,正确地进行项目实战。 本书特色 不留遗漏——覆盖主流Java EE轻量级框架 直击要害——实战化案例精准定位开发细节 学以致用——精要式项目确保开发/ 学习不脱节 潜移默化——研磨式知识讲解参透技术要点 提升效率——垂直式技术精解不绕弯路 循序提升——渐进式知识点统排确保连贯 以点概面——解决方案式项目,知识独立却又体系完整 成功案例——全面经过项目过程锤炼,提升学习/ 开发效率
Python编程入门与实战(第3版) 电子书
本书是一本全面介绍Python编程,并针对多个应用场景给出解决方案的编程手册。从Python的基础知识开始,介绍了数据类型、函数、条件、循环等基本概念,展示了生成器、面向对象编程等具有Python特色的进阶理念,并给出了定位和排除异常、测试代码、调试的方法。随后,本书针对GUI、数据科学等实用场景,使用Python解决实际问题。最后,本书给出了发布Python程序的方法。本书适合想要学习编程或有一
教孩子学编程 C++入门图解 电子书
C++入门图书,图解C++语言知识,适合信息学竞赛初学者。