C++ 初始化的故事
关于本书
在 C++ 中,初始化是一个热门话题!互联网上充满了关于最佳实践的讨论,甚至还有关于这个主题的有趣的表情包。这种情况并不奇怪,因为有十几种方法可以初始化一个简单的整数值、有自动类型推断的复杂规则、数据成员和对象生命周期的细微差别。
于是,出现了这本书。
通过本文,你将学习在现代 C++ 中初始化各种类型的变量和数据成员的实用选项。具体来说,本书教授了多种类型的初始化、构造函数、非静态数据成员初始化、内联变量、指定初始化器等。此外,你将看到从 C++11 到 C++20 的变化和新技术,以及大量的示例来加强你的理解。
计划是解释初始化的大部分(如果不是全部的话),学习许多优秀的 C++ 技术,并了解底层到底发生了什么。
为什么你需要阅读本书?
使用现代 C++(从 C++11 开始),我们有许多新特性来简化工作和代码。改进的一个方面是初始化。现代 C++ 增加了新的初始化规则,试图在保持旧行为(主要来自 C 语言)兼容性的同时简化初始化。然而,有时规则可能看起来令人困惑和复杂,甚至 ISO 委员会也可能需要在此过程中纠正一些事情。这本书将帮助你浏览这些原则,以更好地理解这个主题。更重要的是,初始化只是本文的一个方面。你将学习有关类、构造函数、析构函数、对象生命周期的所有相关主题,甚至是编译器在启动时如何处理数据。
学习目标
我们的目标是让你掌握以下知识:
- 解释关于对象初始化的规则,包括常规变量、数据成员和非局部对象。
- 如何实现特殊的成员函数(构造函数、析构函数、复制/移动操作)以及它们何时有用。
- 如何使用 C++11 特性有效地初始化非静态数据成员,如非静态数据成员初始化、继承和委托构造函数。
- 如何利用 C++17 的内联变量来简化静态变量和静态数据成员的初始化工作。
- 如何处理类似容器的成员、不可复制的数据成员(如 const 数据成员)或只可移动的数据成员,甚至 lambda 表达式。
- 在 C++20 中,什么是聚合类以及如何用指定初始化器创去建这样的对象。
本书的组织结构
目标读者
预备知识
读者反馈以及勘误
示例代码
代码版权
格式
语法高亮显示限制
特殊章节
关于作者
1. 局部变量和简单类型
2. 用构造函数进行初始化
3. 复制和移动操作
4. 委托构造函数和继承构造函数
5. 析构函数
6. 类型推导和初始化
7. 1 到 6 章快速总结
8. 非静态成员的初始化
9. 将容器作为数据成员
10. 非正规数据成员
11. 非局部对象
12. C++20 中的聚合初始化和指定初始化
13. 技术和用例
14. 测验和习题
附录 A - 特殊成员函数的生成规则
附录 B - 习题参考答案
引用和参考
C++ 初始化的故事
http://example.com/2023/08/03/cpp-initialization-story/