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/
作者
QiDianMaker
发布于
2023年8月2日
更新于
2023年8月14日
许可协议