C++知识地图
这页不是单纯目录,而是用来说明 C/C++ 知识之间的依赖关系。C++ 的学习路线不应该过早分叉:基础语法、必要指针/内存、C++ 进阶、OOP 和 STL 都是通用核心。完成通用核心后,再按目标进入历史代码维护 / 学校课程加深,或现代 C++ 开发加深。
主线关系
共享基础
-> 基础语法
-> 输入输出
-> 分支 / 循环 / 函数
-> 数组 / 字符串 / 基本数据组织
通用核心
-> 指针 / const / 基础内存模型
-> 枚举 / 结构体 / 预处理 / 文件操作
-> cpp进阶
-> 面向对象
-> STL
分叉点:STL 初识之后
分支 A:历史代码维护 / 学校课程加深
-> C 语言知识地图 / C 兼容层 / 存储类型 / malloc free
-> new/delete / 手动资源管理
-> 对象特性 / 继承 / 多态细节
-> 模板基础
-> 深水区按需查阅
分支 B:现代 C++ 开发加深
-> RAII / 智能指针
-> nullptr / 初始化 / auto / lambda / optional
-> 右值引用 / 移动语义 / constexpr 基础
-> 标准库容器与算法组合使用
-> 模板基础
-> 工程实践
-> 并发
C++ 深水区:按问题查阅,不作为新手主线必经阶段1. 共享基础
- CandCpp入门 是入口,用来建立 C/C++ 的整体印象。
- CandCpp基础数据变量、CandCpp标准输入输出、CandCpp运算符、CandCpp流程控制、CandCpp函数 构成语法基础。
- CandCpp数组 连接基础数据组织。现代路线可以尽早对照
std::string和std::vector;传统路线则继续深入 C 风格数组和指针。
2. 通用核心
这部分不分学习群体,学校课程、历史代码维护和现代开发都应该掌握。
- CandCpp指针
- CandCpp指针进阶
- CandCppconst
- CandCpp数据变量进阶
- CandCpp枚举
- CandCpp结构体
- CandCpp预处理
- CandCPP文件操作
- CandCpp底层知识
- cpp进阶
- cppOOP知识地图
- STL初识
到 STL初识 后再分叉。这样不会把 C++ 的进阶语法、OOP 和 STL 拆成不同人群的专属内容。
深水区入口规则
主线文件不展开复杂机制,但遇到下面问题时要给出 cpp深水区 入口,避免深水区只形成单向链接:
| 主线阶段 | 只保留在主线的内容 | 需要跳转的深水区入口 |
|---|---|---|
| 指针 / 底层知识 | 地址、指针、栈/堆的基本概念 | 所有权模型、未定义行为 |
| OOP / 构造析构 | 构造、析构、拷贝的常见写法 | cpp对象生命周期、cpp特殊成员函数 |
| 多态 | 虚函数、接口抽象、运行期替换 | cpp对象模型与内存布局 |
| STL / 返回对象 | 容器使用、按值返回的直觉 | cppRVO与返回值优化、cpp异常安全 |
| 现代 C++ 移动语义 | std::move、移动构造、移动赋值 | cpp值类别、cpp完美转发与引用折叠 |
| 模板基础 | 函数模板、类模板、常见泛型接口 | cpp模板偏特化、cpp类型萃取、cppSFINAE与约束、cpp模板实例化与ODR |
判断标准:如果解释需要对象布局、生命周期边界、值类别、异常安全等级、模板替换规则、ODR 或未定义行为,就不要继续堆在主线,改为链接到对应深水区主题。
3. 分支 A:历史代码维护 / 学校课程加深
这条路线适合学校课程、考试、教材和维护偏 C 风格的老代码。
- C语言知识地图
- C语言类型转换规则
- C语言指针细节
- C语言结构体
- C语言联合体
- C语言位域
- C语言存储类型
- C语言系统栈与过程调用
- C语言MallocFree
- c语言常用库
- cppNewAndDelete操作符
- cpp对象特性
- cpp构造函数调用规则
- cpp深拷贝和浅拷贝
- cpp模板编程知识地图
- cpp深水区
这条分支的重点是理解历史包袱、C 兼容层、手动资源管理和传统对象规则。它适合看懂教材、考试题和旧代码,但不代表新代码都应该这样写。
4. 分支 B:现代 C++ 开发加深
这条路线适合新开发者、业务开发、工具开发和希望快速写出可维护 C++ 的学习者。
- 现代cpp
- RAII
- 智能指针
- nullptr
- 最佳初始化
- 新遍历方法
- auto
- lambda
- 右值引用
- 移动语义
- optional
- constexpr
- 函数后关键字
- cpp模板编程知识地图
- cpp工程文件案例
- cpp多线程知识地图
这条分支的重点是优先建立标准库、RAII、封装和可维护代码习惯。通用核心里的指针、底层知识和 OOP 用来支撑理解,不作为第一选择的业务代码模板。
5. 底层与资源管理
- CandCpp底层知识 负责解释程序如何落到内存、地址和编译执行上。
- cppNewAndDelete操作符 连接手动内存管理和对象生命周期。
- C语言知识地图 是 C 语言补充入口,连接类型转换、指针、结构体、联合体、位域、存储类型、系统栈与过程调用。
- C语言MallocFree、C语言存储类型、c语言常用库 用来保留 C 语言层面的资源管理知识。
- 这条线最终会汇入 RAII 和 智能指针:现代 C++ 的核心不是“少用指针”,而是让所有权和生命周期变清楚。
- 如果问题已经从“怎么写”进入“谁拥有资源、什么时候释放、释放后还能不能访问”,转到 所有权模型、cpp对象生命周期 和 未定义行为。
6. 进阶语法
- cpp进阶 是从 C/C++ 基础进入 C++ 写法的过渡入口。
- cpp引用、cpp函数进阶、cpp运算符重载、cpp异常处理 是从“能写”走向“写得像 C++”的关键。
- cpp内联函数、cpp命名空间、cpp自动类型转换 更偏工程可维护性和编译行为。
7. 面向对象
- cppOOP知识地图 是面向对象主入口。
- cpp面向对象 负责 class / struct 和对象基本概念。
- cpp封装 解决数据和行为的边界。
- cpp继承 解决复用和层次建模。
- cpp多态 解决运行期替换和接口抽象。
- cpp对象特性、cpp构造和析构函数、cpp友元 是理解对象生命周期、访问控制和封装例外的补充。
- 如果需要解释虚表、对象大小、对齐、临时对象生命周期、特殊成员函数生成规则,转到 cpp对象模型与内存布局、cpp对象生命周期、cpp特殊成员函数 和 cpp平凡对象。
8. STL
- STL初识 是入口。
- 容器主线:vector、list、map、unordered_map、set、string、其他容器。
- 算法主线:常用遍历算法、常用查找算法、常用排序算法、常用集合算法、常用拷贝和替换算法、常用算术生成算法。
- STL 的核心关系是“容器保存数据,迭代器连接容器和算法,仿函数/lambda 提供行为参数”。
学习顺序上,先会用 STL,再回头理解模板机制更顺:先建立 vector、string、map、算法和迭代器的使用经验,再学模板为什么能支撑这些泛型能力。
如果问题涉及迭代器失效、异常安全、返回值是否会拷贝、容器移动后还能不能用,主线只保留常见结论,机制解释转到 cpp异常安全、cppRVO与返回值优化、cpp值类别。
9. 模板基础
- cpp模板编程知识地图 是模板体系入口,用来连接函数模板、类模板、模板特化、可变参数模板和模板元编程。
- 基础模板:cpp函数模板、cpp函数模板调用规则、cpp类模板。
- 模板边界:cpp模板特化与局限性、cpp类模板分文件编写。
- 现代模板:cpp可变参数模板、cpp常用模板工具、cpp模板元编程入门。
模板是 STL 和现代 C++ 泛型能力背后的机制:STL 容器、算法、智能指针、类型萃取、concepts 都建立在模板机制之上。
初学阶段先会写简单函数模板、类模板,并能看懂常见标准库泛型接口。特化、可变参数模板、类型萃取、SFINAE、concepts 和模板元编程可以后续按需学习。
模板主线不要展开替换失败、偏特化匹配、ODR 和复杂约束规则;这些问题统一转到 cpp模板偏特化、cpp类型萃取、cppSFINAE与约束、cpp模板实例化与ODR。
10. 现代 C++ 常用写法
- 现代cpp 是总览。
- 核心必会:RAII、智能指针、nullptr、最佳初始化、新遍历方法、auto、lambda、右值引用、移动语义、optional、constexpr、函数后关键字。
- 高阶提高:属性列表、断言、完美转发、RTTI、新对象特性。
- 深入机制:复杂对象生命周期、类型萃取、SFINAE、ODR、异常安全和未定义行为,必要时结合 cpp深水区 学习。
现代 C++ 的学习目标是让代码更安全、更清楚、更容易维护,不是追逐所有新语法。以 C++20 为基准时,普通开发者应先掌握核心必会内容;高阶内容按项目问题查阅和补强。
当 右值引用、移动语义、完美转发 已经讲不清“表达式到底是什么值类别”“为什么转发后重载选择变了”,转到 cpp值类别 和 cpp完美转发与引用折叠。
11. C++ 深水区
- cpp深水区 是理解 C++ 语言机制的查漏补缺入口。
- 生命周期与资源:所有权模型、cpp对象生命周期。
- 特殊成员函数:cpp特殊成员函数。
- 返回值与性能:cppRVO与返回值优化。
- 对象性质与布局:cpp平凡对象、cpp对象模型与内存布局。
- 表达式机制:cpp值类别。
- 转发机制:cpp完美转发与引用折叠。
- 模板机制:cpp模板偏特化、cpp类型萃取、cppSFINAE与约束、cpp模板实例化与ODR。
- 稳定性边界:cpp异常安全、未定义行为。
这部分不建议放到新手主线里。它更适合在写过 OOP、STL、智能指针和模板后,用来解释“为什么现代 C++ 要这样写”。深水区作为按问题查阅的旁支索引,不参与主链分叉。
12. 工程与案例
- cpp工程文件案例 用来连接多文件组织、编译和项目结构。
- cpp封装案例、cpp多态案例、cpp模板案例、cpp模板设计案例 把语法点落到可运行设计上。
- cpp多线程知识地图 是并发编程入口。目标是借鉴 Go 把并发任务组织清楚的思想,但用 C++ 的方式管理线程、内存、生命周期和性能。
待补
- STL 迭代器、算法、lambda 的联合示例。
- 现代 C++ 与异常安全的关系图。
相关维护页:待补主题及具体维护规则