0. 简介与入门 🚧
- 0-1-introduction-to-these-tutorials
- 0-2-introduction-to-programming-languages
- 0-3-introduction-to-cplusplus
- 0-4-introduction-to-cpp-development
- 0-5-introduction-to-the-compiler-linker-and-libraries
- 0-6-installing-an-integrated-development-environment-ide
- 0-7-compiling-your-first-program
- 0-8-a-few-common-cpp-problems
- 0-9-configuring-your-compiler-build-configurations
- 0-10-configuring-your-compiler-compiler-extensions
- 0-11-configuring-your-compiler-warning-and-error-levels
- 0-12-configuring-your-compiler-choosing-a-language-standard
- 0-13-what-language-standard-is-my-compiler-using
1. C++ 基础
- 1.1 - 程序结构和语句
- 1.2 - 注释
- 1.3 - 对象和变量
- 1.4 - 变量赋值和初始化
- 1.5 - iostream 简介:cout,cin 和 endl
- 1.6 - 未初始化变量和未定义行为
- 1.7 - 关键字和标识符
- 1.8 - 空白符和基本排版
- 1.9 - 字面量和操作符
- 1.10 - 表达式简介
- 1.11 - 开发你的第一个程序
- 1.x - 小结与测试 - C++基础
2. C++ 基础——函数和文件
- 2.1 - 函数简介
- 2.2 - 函数返回值
- 2.3 - void 函数
- 2.4 - 函数形参和实参
- 2.5 - 局部作用域
- 2.6 - 为什么函数有用,如何高效使用函数
- 2.7 - 前向声明和定义
- 2.8 - 多文件程序
- 2.9 - 命名冲突和命名空间
- 2.10 - 预处理器简介
- 2.11 - 头文件
- 2.12 - 头文件防卫式声明
- 2.13 - 如何设计第一个程序
- 2.x - 小结与测试 - 函数与文件
3. 调试 C++ 程序 🚧
- 3.1 - 语法和语义错误
- 3.2 - 代码调试步骤
- 3.3 - 代码调试策略
- 3.4 — 基本代码调试技术
- 3.5 - 更多代码调试技术
- 3.6 - 使用集成调试器之单步调试
- 3.7 - 使用集成调试器之运行和断点
- 3.8 - 使用集成调试器之监控变量
- 3.9 - 使用集成调试器之调用栈
- 3.10 - 在问题发生前发现问题
- 3.x - 小结与测试 - 代码调试
4. 基础数据类型
- 4.1 - 基础数据类型简介
- 4.2 - Void
- 4.3 - 对象的大小和 sizeof 操作符
- 4.4 - 有符号整型
- 4.5 - 无符号整型以及为什么要避免使用它
- 4.6 - 固定宽度整型和 size_t
- 4.7 - 科学计数法
- 4.8 - 浮点数
- 4.9 - 布尔值
- 4.10 - if 语句简介
- 4.11 - 字符
- 4.12 - 类型转换和 static_cast
- 4.x - 小结与测试 - 基本数据类型
5. 常量与字符串 🚧
- 5.1 - const 变量和符号常量
- 5.2 - 字面量
- 5.3 - 数值系统(十进制、二进制、十六进制和八进制)
- 5-4-the-as-if-rule-and-compile-time-optimization
- 5-5-constant-expressions
- 5-6-constexpr-variables
- 5.7 - std::string 简介
- 5.8 - std::string_view 简介
- 5.9 - std::string_view(第二部分)
- 5-x-chapter-5-summary-and-quiz-processed
6. 运算符 🚧
- 6.1 - 运算符优先级和结合律
- 6.2 - 数学运算符
- 6.3 - 求模和指数运算
- 6.4 - 自增自减运算符及其副作用
- 6.5 - 逗号和条件运算符
- 6-6-the-conditional-operator
- 6.7 - 关系运算符和浮点数比较
- 6.8 - 逻辑运算符
- 6.x - 小结与测试 - 运算符
O. 位运算(可选章节)
7. 作用域、生命周期和链接
- 7.1 - 复合语句(语句块)
- 7.2 - 用户定义命名空间和作用域解析运算符
- 7.3 - 局部变量
- 7.4 - 全局变量
- 7.5 - 变量遮蔽
- 7.6 - 内部链接
- 7.7 - 外部链接和变量前向声明
- 7.8 - 为什么非 const 全局变量是魔鬼
- 7.9 - 内联函数
- 7.10 - 使用 inline 变量共享全局常量
- 7.11 - 静态局部变量
- 7.12 - 作用域和链接小结
- 7.13 - using 声明和 using 指令
- 7.14 - 未命名和内联命名空间
- 7.x - 小结与测试 - 作用域、持续时间和链接
8. 控制流 🚧
- 8.1 - 控制流
- 8.2 - if 语句和语句块
- 8.3 - 常见的 if 语句错误
- 8-4-constexpr-if-statements
- 8.5 - switch 语句基础
- 8.6 - switch fallthrough属性和作用域
- 8.7 - goto 语句
- 8.8 - 循环和 while 语句
- 8.9 - do-while 语句
- 8.10 - for 语句
- 8.11 - break 和 continue
- 8.12 - 挂起(提前结束程序)
- 8.13 - 随机数生成器简介
- 8.14 - 使用 Mersenne Twister 生成随机数
- 8-15-global-random-numbers-random-h
- 8.x - 小结与测试 - 控制流和错误处理
9. 错误检测和处理 🚧
- 9.1 - 代码测试
- 9.2 - 代码覆盖率
- 9.3 - C++ 中常见的语义错误
- 9.4 - 发现错误和处理错误
- 9.5 - std::in 和输入错误处理
- 9.6 - 断言和 static_assert
- 9-x-chapter-9-summary-and-quiz
10. 类型转换、类型别名和类型推导 🚧
- 10.1 - 隐式类型转换
- 10.2 - 浮点数和整型提升
- 10.3 - 数值转换
- 10-4-narrowing-conversions-list-initialization-and-constexpr-initializers
- 10.5 - 算术转换
- 10.6 - 显式类型转换和static_cast
- 10.7 - typedef 和类型别名
- 10.8 - 使用 auto 关键字进行类型推断
- 10.9 - 函数的类型推断
- 10.x - 小结与测试 - 类型转换和函数重载
11. 函数重载和函数模板 🚧
- 11.1 - 函数重载
- 11.2 - 重载函数的区分
- 11.3 - 函数重载解析和不明确匹配
- 11-4-deleting-functions
- 11.5 - 默认参数
- 11.6 - 函数模板
- 11.7 - 函数模板的实例化
- 11.8 - 具有多种类型的函数模板
- 11-9-non-type-template-parameters
- 11-10-using-function-templates-in-multiple-files
- 11-x-chapter-11-summary-and-quiz
F. Constexpr 函数 🚧
- F.1 - Constexpr 和 consteval 函数
- F-2-constexpr-functions-part-2
- F-3-constexpr-functions-part-3-and-consteval
- F-4-constexpr-functions-part-4
- F.X-chapter-f-summary-and-quiz
12. 复合类型-引用和指针 🚧
- 12.1 - 复合数据类型
- 12.2 - 值的分类(左值和右值)
- 12.3 - 左值引用
- 12.4 - const类型的左值引用
- 12.5 - 传递左值引用
- 12-6-pass-by-const-lvalue-reference
- 12.7 - 指针简介
- 12.8 - 空指针
- 12.9 - 指针和const
- 12.10 - 按地址传递
- 12.11 - 按地址传递 Part2
- 12.12 - 按引用返回和按地址返回
- 12-13-in-and-out-parameters
- 12.14 - 指针、引用和const的类型推断
- 12-15-stdoptional
- 12.x - 小结与测试 - 引用和指针
13. 复合类型-枚举和结构体 🚧
- 13.1 - 程序定义类型简介
- 13.2 - 无作用域枚举类型
- 13.3 - 限定作用域枚举类型的输入输出
- 13-4-converting-an-enumeration-to-and-from-a-string
- 13-5-introduction-to-overloading-the-i-o-operators
- 13.6 - 限定作用域枚举(枚举类)
- 13.7 - 结构体、成员和成员选择
- 13.8 - 结构体的聚合初始化
- 13.9 - 默认成员初始化
- 13.10 - 结构体传递及其他
- 13-11-struct-miscellany
- 13.12 - 基于指针和引用的成员选择
- 13.13 - 类模板
- 13.14 - 类模板参数推断CTAD
- 13-15-alias-templates
- 13.x - 小结与测试 - 枚举和结构体
- 13.y - 学会使用C++参考手册
14. 类简介 🚧
- 14.1 - 欢迎来到面向对象的世界
- 14.2 - 类和类成员
- 14-3-member-functions
- 14.4 - const 对象和成员函数
- 14.5 - 访问修饰符 public 和 private
- 14.6 - 成员访问函数与封装
- 14-7-member-functions-returning-references-to-data-members
- 14-8-the-benefits-of-data-hiding-encapsulation
- 14.9 - 构造函数
- 14.10 - 构造函数成员初始化值列表
- 14-11-default-constructors-and-default-arguments
- 14.12 - 重叠和委托构造函数
- 14.13 - 匿名对象
- 14.14 - 拷贝构造函数
- 14.15 - 拷贝初始化
- 14.16 - 转换构造函数与explicit和delete关键字
- 14-17-constexpr-aggregates-and-classes
- 14.x - 小结与测试 - 面向对象基础
15. 深入类 🚧
- 15.1 - 隐藏的this指针
- 15.2 - 类代码和头文件
- 15.3 - 类中的嵌套类型
- 15-4-introduction-to-destructors
- 15-5-class-templates-with-member-functions
- 15.6 - 静态成员变量
- 15.7 - 静态成员函数
- 15.8 - 友元函数和友元类
- 15-9-friend-classes-and-friend-member-functions
- 15-10-ref-qualifiers
- 15-x-chapter-15-summary-and-quiz
16. 动态数组Vector 🚧
- 16-1-introduction-to-containers-and-arrays
- 16.2 — 动态数组 std::vector 简介
- 16-3-stdvector-and-the-unsigned-length-and-subscript-problem
- 16-4-passing-stdvector
- 16-5-returning-stdvector-and-an-introduction-to-move-semantics
- 16.6 - 数组和循环
- 16-7-arrays-loops-and-sign-challenge-solutions
- 16.8 - for-each 循环
- 16-9-array-indexing-and-length-using-enumerators
- 16.10 - std::vector的容量和类栈行为
- 16-11-stdvector-and-stack-behavior
- 16-12-stdvector-bool
- 16-x-chapter-16-summary-and-quiz
17. 固定长度数组:std::array和C风格数组 🚧
- 17.1 — 固定数组 std::array 简介
- 17-2-stdarray-length-and-indexing
- 17-3-passing-and-returning-stdarray
- 17-4-stdarray-of-class-types-and-brace-elision
- 17-5-arrays-of-references-via-stdreference_wrapper
- 17-6-stdarray-and-enumerations
- 17-7-introduction-to-c-style-arrays
- 17.8 - 指针和数组
- 17.9 - 指针运算和数组索引
- 17.10 - C 语言风格字符串
- 17.11 - C 风格字符串符号常量
- 17.12 - 多维数组
- 17-13-multidimensional-stdarray
- 17.x - 小结与测试 - 数组、字符串和动态分配
18. 迭代器与算法(建设中)
19. 动态内存分配 🚧
20. 函数 🚧
- 20.1 - 函数指针
- 20.2 - 栈和堆
- 20.3 - 递归
- 20.4 - 命令行参数
- 20.5 - 省略号以及为什么要避免使用它
- 20.6 - lambda表达式简介(匿名函数)
- 20.7 - lambda 闭包
- 20.x - 小结与测试 - 函数
21. 操作符重载 🚧
- 21.1 - 运算符重载简介
- 21.2 - 使用友元重载算数运算符
- 21.3 - 使用普通函数重载运算符
- 21.4 - 重载输入输出运算符
- 21.5 - 使用成员函数重载运算符
- 21.6 - 重载一元运算符+,- 和 !
- 21.7 - 重载比较运算符
- 21.8 - 重载递增递减运算符
- 21.9 - 重载下标运算符
- 21.10 - 重载括号运算符
- 21.11 - 重载类型转换操作符
- 21.12 - 重载赋值运算符
- 21.13 - 浅拷贝和深拷贝
- 21.14 - 重载运算符和函数模板
- 21.x - 小结与测试 - 运算符重载
22. 移动语义和智能指针 🚧
- 22.1 - 智能指针和移动语义简介
- 22.2 - 右值引用
- 22.3 - 移动构造函数和移动赋值
- 22.4 - std::move
- 22.5 — std::unique_ptr
- 22.6 — std::shared_ptr
- 22.7 - 智能指针带来的循环依赖问题
- 22.x - 小结与测试 - 移动和智能指针
23. 对象关系简介
- 23.1 - 对象关系
- 23.2 - 组合关系
- 23.3 - 聚合关系
- 23.4 - 关联关系
- 23.5 - 依赖关系
- 23.6 - 容器类
- 23.7 - std::initializer_list
- 23.x - 小结与测试 - 对象关系
24. 继承
- 24.1 - 继承简介
- 24.2 - C++继承基础
- 24.3 - 派生类的构造顺序
- 24.4 - 派生类的构造和初始化
- 24.5 - 继承和访问说明符
- 24.6 - 为派生类添加新功能
- 24.7 - 调用继承函数和重写
- 24.8 - 隐藏继承的函数
- 24.9 - 多重继承
- 24.x - 小结与测试 - 继承
25. 虚函数
- 25.1 - 基类的指针和引用
- 25.2 - 虚函数和多态
- 25.3 - override、final标识符以及协变返回类型
- 25.4 - 虚构造函数、虚赋值和重载虚拟化
- 25.5 - 早期绑定和后期绑定
- 25.6 - 虚函数表
- 25.7 - 纯虚函数,抽象基类和接口类
- 25.8 - 虚基类
- 25.9 - 对象切片
- 25.10 - 动态类型转换
- 25.11 - 使用 << 运算符打印继承类
- 25.x - 小结与测试 - 虚函数
26. 模板和类 🚧
- 26-1-template-classes
- 26-2-template-non-type-parameters
- 26-3-function-template-specialization
- 26-4-class-template-specialization
- 26-5-partial-template-specialization
- 26-6-partial-template-specialization-for-pointers
- 26.x - 小结与测试 - 模板和类
27. 异常 🚧
- 27-1-the-need-for-exceptions
- 27-2-basic-exception-handling
- 27-3-exceptions-functions-and-stack-unwinding
- 27-4-uncaught-exceptions-catch-all-handlers
- 27-5-exceptions-classes-and-inheritance
- 27-6-rethrowing-exceptions
- 27-7-function-try-blocks
- 27-8-exception-dangers-and-downsides
- 27-9-exception-specifications-and-noexcept
- 27.10 - std::move_if_noexcept
- 27.x - 小结与测试 - 异常
28. 输入输出
- 28.1 - 输入输出流
- 28.2 - 使用istream处理输入
- 28.3 - 使用ostream和ios处理输出
- 28.4 - 用于字符串的 stream 类
- 28.5 - 流状态和输入验证
- 28.6 - 基本文件输入输出
- 28.7 - 随机文件输入输出