本书为《C++17 the complete guide》(第一版) by Nicolai M. Josuttis的个人中文翻译版, 仅供学习和交流使用
C++17是现代 C++编程中的下一个版本,最新版本的gcc、clang和 Visual C++ 都至少已经部分支持它。尽管
迁移到 C++17 并不像迁移到 C++11一样是一个巨大的变化,但 C++17也包含了非常多很小但却很有价值的语言
和库特性。它们再一次改变了我们使用 C++编程的方式,无论是对应用程序员还是提供基础库的程序员来说都
是如此。
《C++17完全指南》是一本深入解析C++17新特性的书籍,由Nicolai M. Josuttis撰写。C++17是C++编程语言的一个重要版本,虽然相较于C++11的革新可能显得较为温和,但它引入了许多小而实用的改进,这些改进对提升开发效率和代码质量有着显著的影响。本书旨在帮助开发者理解和掌握C++17的新功能,无论你是应用程序员还是库开发者,都能从中受益。
书中首先介绍了C++17标准的关键特点,包括但不限于:
1. **结构化绑定**:这是一个全新的语法特性,允许开发者更方便地处理元组(tuple-like)对象,可以一次性解构多个值,提高了代码的可读性和简洁性。结构化绑定可用于结构体、类、原生数组,以及`std::pair`、`std::tuple`和`std::array`等类型。此外,通过提供一个类似于Tuple的API,结构化绑定还能增强自定义类型的功能。
2. **带初始化的if和switch语句**:在C++17中,可以在if和switch语句中进行变量初始化,这使得代码更加紧凑,减少了临时变量的使用。例如,可以在if语句中直接声明并初始化一个变量,然后在后续的代码块中使用。
3. **折叠表达式**:C++17引入了折叠表达式,用于处理模板元编程中的元组和类型列表,使得元编程更加简洁和高效。
4. **字面量操作符重载**:开发者现在可以为自定义类型定义二进制字面量操作符,如`"_"b`或`"_"s`,增强了数值和字符串的表示能力。
5. **返回类型推断改进(即`auto`关键字的改进)**:在C++17中,函数的返回类型可以通过`= default;`和`= delete;`进行推断,使得编写函数更加灵活。
6. **`std::variant`和`std::any`**:这两个库组件提供了更加安全和灵活的多态数据类型,`std::variant`代表有限数量的类型之一,`std::any`则可以存储任意类型的数据。
7. **`std::optional`**:这个新库组件允许表示可能缺失的值,提高了代码的健壮性和错误处理能力。
8. **`std::string_view`**:作为轻量级字符串引用,`std::string_view`提升了处理字符串的效率,减少了不必要的拷贝。
9. **并行算法**:C++17扩展了STL,引入了一系列并行版本的算法,如`std::execution::par`,可以利用多核处理器进行并行计算。
10. **其他改进**:还包括更高效的`std::allocator`、`std::make_unique`的泛型版本、更好的模板错误消息等。
为了便于读者学习,本书采用了清晰的结构,详细讲解了每个新特性的使用方法、背后的动机和可能的应用场景。书中还包含了大量的示例代码,帮助读者更好地理解并实践这些新特性。同时,作者鼓励读者在遇到问题时积极反馈,以便不断更新和完善内容。
《C++17完全指南》是一本全面、深入的C++17参考书,它将帮助读者熟练掌握C++17的新特性,提升编程技能,从而编写出更高效、更易维护的现代C++代码。
1