首页
计算机与互联网
现代C++编程实战:132个核心技巧示例(原书第2版)
现代C++编程实战:132个核心技巧示例(原书第2版)
书籍作者:马里乌斯·班西拉
ISBN:9787111750109
书籍语言:简体中文
连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3
下载次数:1408
创建日期:2024-06-27
发布日期:2024-06-27
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
内容简介
本书介绍现代C++标准。内容按照条目的方式编排,每一个条目包含一个特定语言或库的功能,或C++开发人员面临的常见问题及其使用现代C++的典型解决方案。通过130多个条目,读者将学习掌握核心语言功能和标准库,包括字符串、容器、算法、迭代器、流、正则表达式、线程、文件系统、原子操作、实用程序和ranges。
作者简介
Marius Bancila是一名软件工程师,拥有近20年为工业和金融部门开发解决方案的经验。他还是一名软件架构师,专注于微软技术,主要使用C++和C#开发桌面应用程序。他热衷于与他人分享自己的技术专长,自2006年以来,他被评为微软的C++和开发人员技术MVP。他是Modern C++ Challenge的作者和Learn C# Programming的合著者。
编辑推荐
适读人群 :C++程序员
C++以速度快、高效和高性能著称,是使用非常广泛的通用编程语言之一。本书介绍了现代C++的新特性,如模块、概念、协程,以及对标准库的许多补充,包括range和文本格式化。本书以实用技巧示例的形式组织,涵盖了现代C++开发人员面临的各种问题。
本书不仅深入探讨了现代C++编程中核心概念(如函数和类、迭代器和算法、流和文件系统、线程和并发、智能指针和移动语义等)的细节,还深度剖析了编程的性能,以帮助开发人员借助最佳实践编写快速、精简的代码。
此外,本书还探索了有用的模式,深入研究了许多惯用法的实现,包括pimpl、命名参数和律师-委托人惯用法,详细讲解了避免重复使用工厂模式等技术。本书还专门用一章介绍了单元测试,涵盖三个广泛使用的C++库:Boost.Test、Google Test和Catch2。
读完本书,你将能够有效地利用C++编程的特性和技术来增强应用程序的性能、可伸缩性和效率。
前言
Preface前 言 C++是一种非常流行且被广泛运用的编程语言,30多年来一直如此。C++专注于性能、效率和灵活性,结合了诸如面向对象、命令式、泛型和函数式编程等范式。C++标准由国际标准化组织(International Organization for Standardization,ISO)制定,在过去的十年里经历了巨大变革。随着C++11的标准化,这门语言进入了新的时代,这被称为现代C++。类型推导、移动语义、lambda表达式、智能指针、统一初始化、可变参数模板和许多其他特性改变了我们用C++编写代码的方式,以至于它几乎看起来像一种新的编程语言。随着2020年C++20标准的发布,这一变化正在进一步推进。新标准包括C++语言的许多新变化,例如模块、概念(concept)和协程,相应的标准库也发生了变化,例如range、文本格式化和日历。 本书将主要介绍C++11、C++14、C++17以及C++20标准。本书按照条目(recipe)的方式编排,每一个条目包含一个特定语言或库特性,或者C++开发人员面临的常见问题及其现代C++典型解决方案。通过130多个条目,你将掌握核心语言特性和标准库,包括字符串、容器、算法、迭代器、流、正则表达式、线程、文件系统、原子操作、实用程序和range。 本书中30多个新的或更新的条目涵盖了C++20的特性,包括模块、概念、协程、range、线程和同步机制、文本格式化、日历和时区、即时函数、三元比较运算符和新的span类。 本书中的所有条目都包含展示某个特性使用方法或某个问题解决方式的代码示例。这些代码示例使用Visual Studio 2019编写,但是也可以使用Clang和GCC进行编译。这些编译器在逐步支持更多的语言特性,所以推荐使用新版本的编译器,以保证书中的示例都可以通过编译。在撰写这篇前言时,新版本为GCC 10.1、Clang 12.0和VC++ 2019 14.27(Visual Studio 2019 16.7)。尽管这些编译器完全支持C++17,但是对于C++20标准的支持因编译器而异。 本书面向所有的C++开发人员,无论他们的经验水平如何。一般初级或者中级的C++开发人员可以通过本书掌握新特性,并成为经验丰富的现代C++开发者。有经验的C++开发人员可以时不时地通过本书查阅C++11、C++14、C++17和C++20标准的新特性。本书包含130多个简单、中级或高级的条目。然而,它们都要求读者具备一些C++知识,包括函数、类、模板、命名空间以及宏等。因此,如果你不熟悉该语言,建议先看入门书来熟悉一下核心知识,然后再继续阅读本书。 本书内容 第1章介绍现代C++语言的核心特性,包括类型推导、统一初始化、作用域枚举、基于range的for循环、结构化绑定、类模板参数推导等。 第2章讨论数值和字符串之间的相互转换、伪随机数生成、正则表达式以及各种类型的字符串,同时也探讨如何用C++20文本格式化库格式化文本。 第3章深入探讨实现默认函数和删除函数、可变参数模板、lambda表达式和高阶函数。 第4章尝试从各个角度介绍编译过程,例如条件编译、编译时断言、代码生成和用属性提示编译器。 第5章介绍几种标准库容器、算法以及编写自定义随机访问迭代器的方法。 第6章深入讲解chrono库,包括C++20对日历和时区的支持,any、optional、variant和span类型,以及类型特征(type trait)。 第7章解释如何把数据写入文件流,如何从文件流读取数据,以及如何使用I/O操作符来控制文件流,并探索filesystem库。 第8章介绍如何使用线程、互斥量、锁、条件变量、promise、future、原子类型,以及C++20的latch、barrier和semaphore。 第9章主要探讨异常、常量正确性、类型转换、智能指针和移动语义。 第10章涵盖各种有用的设计模式和惯用法,例如pimpl惯用法、非虚接口惯用法和奇异递归模板模式(Curiously Recurring Template Pattern,CRTP)。 第11章介绍3个广泛使用并且可以快速上手的测试框架,即Boost.Test、Goolge Test和Catch2。 第12章介绍C++20重要的新增特性—模块、概念、协程和range。
目录
Contents目 录
前言
第1章 现代C++的核心特性 1
1.1 尽可能地使用auto关键字 1
1.1.1 使用方式 1
1.1.2 工作原理 2
1.1.3 延伸阅读 6
1.2 创建类型别名和模板别名 6
1.2.1 使用方式 6
1.2.2 工作原理 7
1.2.3 延伸阅读 8
1.3 理解统一初始化 8
1.3.1 准备工作 8
1.3.2 使用方式 8
1.3.3 工作原理 9
1.3.4 更多 12
1.3.5 延伸阅读 13
1.4 了解各种形式的非静态成员
初始化 13
1.4.1 使用方式 13
1.4.2 工作原理 14
1.4.3 延伸阅读 17
1.5 控制以及查询对象对齐方式 17
1.5.1 准备工作 17
1.5.2 使用方式 17
1.5.3 工作原理 18
1.5.4 延伸阅读 21
1.6 使用作用域枚举 21
1.6.1 使用方式 22
1.6.2 工作原理 23
1.6.3 延伸阅读 24
1.7 在虚方法中使用override和final
关键字 25
1.7.1 准备工作 25
1.7.2 使用方式 25
1.7.3 工作原理 26
1.7.4 延伸阅读 27
1.8 使用基于range的for循环迭代range 27
1.8.1 准备工作 28
1.8.2 使用方式 28
1.8.3 工作原理 29
1.8.4 延伸阅读 30
1.9 对自定义类型使用基于range的
for循环 30
1.9.1 准备工作 30
1.9.2 使用方式 31
1.9.3 工作原理 33
1.9.4 延伸阅读 33
1.10 使用explicit构造函数和转换
操作符来避免隐式转换 33
1.10.1 准备工作 34
1.10.2 使用方式 34
1.10.3 工作原理 34
1.10.4 延伸阅读 38
1.11 使用匿名命名空间来代替静态
全局空间 38
1.11.1 准备工作 38
1.11.2 使用方式 38
1.11.3 工作原理 39
1.11.4 延伸阅读 40
1.12 使用内联命名空间进行符号版本控制 40
1.12.1 准备工作 40
1.12.2 使用方式 41
1.12.3 工作原理 41
1.12.4 延伸阅读 43
1.13 使用结构化绑定处理多值返回 43
1.13.1 准备工作 43
1.13.2 使用方式 44
1.13.3 工作原理 44
1.13.4 更多 45
1.13.5 延伸阅读 47
1.14 使用类模板参数推导简化代码 47
1.14.1 使用方式 47
1.14.2 工作原理 48
1.14.3 延伸阅读 49
第2章 数字和字符串 50
2.1 在数值类型和字符串类型之间
进行转换 50
2.1.1 准备工作 50
2.1.2 使用方式 50
2.1.3 工作原理 51
2.1.4 延伸阅读 55
2.2 数值类型的极限和其他属性 55
2.2.1 准备工作 55
2.2.2 使用方式 55
2.2.3 工作原理 56
2.2.4 延伸阅读 58
2.3 生成伪随机数 58
2.3.1 准备工作 59
2.3.2 使用方式 59
2.3.3 工作原理 59
2.3.4 延伸阅读 64
2.4 初始化伪随机数生成器内部状态的所有位 64
2.4.1 准备工作 64
2.4.2 使用方式 64
2.4.3 工作原理 65
2.4.4 延伸阅读 65
2.5 创建cooked的用户自定义
字面量 66
2.5.1 准备工作 66
2.5.2 使用方式 66
2.5.3 工作原理 67
2.5.4 更多 70
2.5.5 延伸阅读 71
2.6 创建原始的用户自定义字面量 71
2.6.1 准备工作 71
2.6.2 使用方式 71
2.6.3 工作原理 73
2.6.4 延伸阅读 75
2.7 使用原始字符串字面量来避免
转义字符 75
2.7.1 准备工作 75
2.7.2 使用方式 76
2.7.3 工作原理 76
2.7.4 延伸阅读 77
2.8 创建字符串辅助库 77
2.8.1 准备工作 77
2.8.2 使用方式 78
2.8.3 工作原理 80
2.8.4 延伸阅读 82
2.9 使用正则表达式验证字符串的
格式 82
2.9.1 准备工作 83
2.9.2 使用方式 83
2.9.3 工作原理 83
2.9.4 更多 88
2.9.5 延伸阅读 89
2.10 使用正则表达式解析字符串的
内容 89
2.10.1 准备工作 89
2.10.2 使用方式 90
2.10.3 工作原理 91
2.10.4 延伸阅读 93
2.11 使用正则表达式替换字符串的
内容 93
2.11.1 准备工作 93
2.11.2 使用方式 93
2.11.3 工作原理 94
2.11.4 延伸阅读 96
2.12 使用std::string_view代替常量
字符串引用 96
2.12.1 准备工作 96
2.12.2 使用方式 96
2.12.3 工作原理 97
2.12.4 延伸阅读 99
2.13 使用std::format格式化文本 99
2.13.1 准备工作 99
2.13.2 使用方式 99
2.13.3 工作原理 100
2.13.4 延伸阅读 104
2.14 使用std::format格式化用户
自定义类型 104
2.14.1 准备工作 1