README
# 卷一《语法卷:现代 C++ 基础入门》总目录与导读
本卷是《现代 C++ 由浅入深:从入门到工程精通》四卷本的第一卷。 目标:让你在 17 章篇幅内,把"会读 C++ 代码"升级到"会写符合现代 C++ 习惯的代码"。 阅读层级:0 基础学生 → 转语言工程师 → 已写过 C++ 但想系统补漏的开发者。
# 目录介绍
- 01.卷一定位与读者画像
- 02.卷一 17 章总目录
- 03.章节与文件映射表
- 04.学习路径与时间预算
- 05.卷一读者承诺与边界
- 06.每章统一结构
- 07.如何与卷二、三、四衔接
- 08.卷一改造完成度(目录连贯性自检表)
# 01.卷一定位与读者画像
# 1.1 卷一在四卷本中的位置
《现代 C++ 由浅入深:从入门到工程精通》
┌──────────────────────────────────────────────────────────┐
│ 卷一《语法卷》 ← 你在这里 │
│ · 现代 C++ 怎么写 │
│ ↓ │
│ 卷二《工程卷》 · 类与项目怎么组织(9 个完整项目) │
│ ↓ │
│ 卷三《底层卷》 · 编译器和运行时怎么实现 │
│ ↓ │
│ 卷四《实战卷》 · 上线后怎么调与怎么活 │
└──────────────────────────────────────────────────────────┘
2
3
4
5
6
7
8
9
10
11
12
卷一的角色是"语言地基":
- 不是 C++ Primer 的复刻——我们以 C++17 为基线,C++11 的特性默认就是要会的,所有"老 C++ 写法(如
NULL、原始new/delete)"会被明确标注为反例。 - 不深挖底层——对象内存布局、虚函数表、移动语义等内容全部留给卷三,本卷只讲"够用、能写"。
- 不讲项目工程化——CMake、单元测试、CI 等放在卷二,本卷只用最简单的
g++ a.cpp b.cpp。
# 1.2 三类读者的不同读法
| 读者画像 | 推荐读法 | 预计耗时 |
|---|---|---|
| 零基础大学生 | 17 章顺序通读,每章动手敲 3-5 个代码示例 | 6-8 周 |
| C 语言转 C++ | 跳过第 2-6 章细节,重点读第 7-12 章(OOP)、第 16 章(STL)、第 18 章(现代特性) | 3-4 周 |
| Java/Go/Python 转 C++ | 重点读第 8 章(指针/引用)、第 11、12 章(动态内存/RAII)、第 18 章;其他章作为查阅 | 2-3 周 |
# 1.3 读完卷一你将获得什么
- ✅ 读得懂任何 C++17 风格的现代代码,认得出 90% 的关键字与语法
- ✅ 能独立写出 200-500 行的小型程序(命令行工具、控制台游戏)
- ✅ 知道
auto/nullptr/std::string/std::vector/ 智能指针的"正确打开方式" - ✅ 知道 为什么不该 用裸数组、裸指针、
malloc/free、宏常量 - ✅ 具备进入卷二(项目实战)和卷三(底层原理)的全部前置知识
# 02.卷一 17 章总目录
第 18 章
18.特性图谱.md作为附录性"特性速览"贴在最末,配合全卷复盘。
# 2.1 第一篇 开篇(第 1 章)
| 章 | 文件 | 关键词 |
|---|---|---|
| 第 1 章 | 01.Cpp简史.md | C++98/03/11/14/17/20/23、Bjarne Stroustrup、ISO C++ 委员会 |
# 2.2 第二篇 基础语法(第 2-6 章)
| 章 | 文件 | 关键词 |
|---|---|---|
| 第 2 章 | 02.基础语法.md | main、#include、命名空间、修饰符、关键字、现代 Hello World |
| 第 3 章 | 03.数据类型.md | 整型/浮点/字符/布尔、固定宽度类型、std::byte、四种 _cast |
| 第 4 章 | 04.运算符.md | 算术/比较/逻辑/位/sizeof、C++20 <=> 三路比较 |
| 第 5 章 | 05.复合类型.md | std::string、std::array、enum class、为什么不该用裸数组 |
| 第 6 章 | 06.流程语句.md | if / if constexpr / if-init / switch、for / 范围 for、结构化绑定 |
# 2.3 第三篇 函数与作用域(第 7-9 章)
| 章 | 文件 | 关键词 |
|---|---|---|
| 第 7 章 | 07.函数.md | 值传递/引用传递/指针传递、内联、[[nodiscard]]、Lambda、consteval |
| 第 8 章 | 08.指针引用.md | 取地址/解引用、空指针/野指针/悬空指针、引用本质、左值/右值预告 |
| 第 9 章 | 09.类和对象.md | 封装、this、构造/析构、初始化列表、委托构造、explicit、五法则 / 零法则 |
# 2.4 第四篇 面向对象初步(第 10-12 章)
| 章 | 文件 | 关键词 |
|---|---|---|
| 第 10 章 | 10.继承多态.md | public/protected/private 继承、菱形继承、虚继承、override / final、纯虚函数 |
| 第 11 章 | 11.内存模型.md | 栈/堆/全局/静态、生命周期、对象存活窗口、与卷三的衔接 |
| 第 12 章 | 12.动态内存.md | new / delete、内存泄漏、智能指针 unique_ptr / shared_ptr / weak_ptr(使用层面) |
# 2.5 第五篇 库与外围(第 13-16 章)
| 章 | 文件 | 关键词 |
|---|---|---|
| 第 13 章 | 13.IO和文件.md | cin / cout / cerr、fstream、二进制读写、std::filesystem |
| 第 14 章 | 14.异常处理.md | try / catch / throw、std::exception、noexcept、错误码 vs 异常 |
| 第 15 章 | 15.线程和锁.md | std::thread / std::jthread、mutex、atomic、四种锁守卫 |
| 第 16 章 | 16.STL模版.md | 函数模板/类模板、vector / list / map / unordered_map、迭代器、算法 |
# 2.6 第六篇 现代 C++ 速览(第 17-18 章)
| 章 | 文件 | 关键词 |
|---|---|---|
| 第 17 章 | 17.预处理器.md | #include / #define / 条件编译、头文件保护、Modules(C++20)简介 |
| 第 18 章 | 18.特性图谱.md | C++11→C++23 全部关键特性按"使用频度 × 重要性"打分 |
# 03.章节与文件映射表
| 文件 | 书稿章节 | 改造重点(详见各章末尾"卷一改造增补") |
|---|---|---|
README.md(本文件) | 卷首导读 | 全新创建 |
01.Cpp简史.md | 第 1 章 | 全新创建 |
02.基础语法.md | 第 2 章 | 添加 auto/nullptr/using 现代写法节 |
03.数据类型.md | 第 3 章 | 增补 std::byte / std::optional 类型 |
04.运算符.md | 第 4 章 | 增补 C++20 <=> 三路比较运算符 |
05.复合类型.md | 第 5 章 | 数组小节增补"为什么不该用裸数组" |
06.流程语句.md | 第 6 章 | 增补 if-init / if constexpr / 结构化绑定 |
07.函数.md | 第 7 章 | 增补 [[nodiscard]] / consteval / 尾置返回 |
08.指针引用.md | 第 8 章 | 引用部分前置智能指针概念预告 |
09.类和对象.md | 第 9 章 | 增补"五法则 / 零法则"小节、=default / =delete |
10.继承多态.md | 第 10 章 | 强化 override / final、虚析构强制要求 |
11.内存模型.md | 第 11 章 | 全新创建(与卷三第 1 章呼应) |
12.动态内存.md | 第 12 章 | 重构为以 RAII 为主线,裸 new/delete 退居反例 |
13.IO和文件.md | 第 13 章 | 增补 std::filesystem / std::format / std::print |
14.异常处理.md | 第 14 章 | 增补 noexcept / std::expected / 错误码 vs 异常 |
15.线程和锁.md | 第 15 章 | 增补 std::jthread、四种锁守卫、原子内存序 |
16.STL模版.md | 第 16 章 | 仅做使用层面,源码留给卷三;增补 Ranges 与容器选型决策表 |
17.预处理器.md | 第 17 章 | 增补 Modules(C++20)简介、用现代特性替代宏 |
18.特性图谱.md | 第 18 章 | 全新创建(卷一与后三卷的总索引) |
# 04.学习路径与时间预算
# 4.1 8 周学习计划(推荐)
Week 1: 第 1-2 章 开篇 + 现代 Hello World(每天 1-2 小时,跑通 3 个示例)
Week 2: 第 3-4 章 数据类型 + 运算符(每天 2 小时,做小练习)
Week 3: 第 5-6 章 复合类型 + 流程(重点:vector / string / 范围 for)
Week 4: 第 7-8 章 函数 + 指针引用(每章配 5 道思考题)
Week 5: 第 9-10 章 类与对象 + 继承多态
Week 6: 第 11-12 章 内存模型 + 动态内存与 RAII
Week 7: 第 13-15 章 IO + 异常 + 线程
Week 8: 第 16-18 章 STL + 预处理 + 现代特性图谱(边读边查)
2
3
4
5
6
7
8
# 4.2 速读模式(已有 C/C++ 基础)
Day 1: 第 1、18 章(看现代演进 + 特性图谱)
Day 2: 第 8、11、9 章(指针引用 + 内存模型 + 类的现代写法)
Day 3: 第 12、16 章(RAII + STL)
Day 4: 其他章节按目录速翻,遇到陌生概念再回查
2
3
4
# 4.3 三种典型读者路线
零基础学生: 1 → 2 → 3 → 4 → 5 → 6 → 7 → 8 → 9 → 10 → 11 → 12 → 13 → 14 → 15 → 16 → 17 → 18
C 转 C++: 1 → 3 → 7(速读) → 8 → 11 → 9 → 10 → 12 → 13 → 16 → 18
Java/Go 转: 1 → 8 → 11 → 9(重点)→ 12(重点)→ 13 → 14 → 18
2
3
# 05.卷一读者承诺与边界
# 5.1 本卷会教你的
- ✅ 现代 C++ 的"日常写法"(C++17 为主,关键 C++20/23 特性预告)
- ✅ 所有基础语法、关键字、修饰符的实际用法和取舍
- ✅ 常见陷阱(裸指针 / 浅拷贝 / 内存泄漏 / 整数溢出 / 浮点比较)的识别与回避
- ✅ STL 容器的使用(不会讲源码)
- ✅ "如果做错了会怎样"——每章末尾"新手陷阱 Top 5"
# 5.2 本卷不会展开的
下表的内容会被提到、留链接,但展开讲的是后三卷:
| 主题 | 在哪一卷讲 |
|---|---|
对象内存布局、虚函数表、vptr 偏移 | 卷三第 1、5 章 |
模板元编程、SFINAE、requires | 卷三第 6、9 章 |
STL 源码(vector / map / unordered_map 实现) | 卷三第 7 章 |
| 移动语义、完美转发、引用折叠 | 卷三第 11 章 |
| 内存序、原子、无锁队列 | 卷三第 16-17 章 |
| 协程、Modules、Concepts、Ranges 原理 | 卷三第 9、19、21 章 |
| 调试 / 性能 / 安全 / 工程化 | 卷四全卷 |
| CMake / 单元测试 / CI 等工程实践 | 卷二第 13-15 章 |
如果你在卷一读到某个概念觉得"没讲透",不是漏写,而是刻意延迟——在该处会有"➡ 展开见 卷三第 X 章"的指引。
# 06.每章统一结构
为了便于阅读和复习,卷一从第 2 章开始,所有章节都遵循以下统一结构:
1. 章节目录(自动生成的锚点链接)
2. 本章学习目标(3-5 条 bullet)
3. 主体内容(按 N.1 / N.2 / N.3 ... 分节)
每个三级小节内部:
· 概念解释
· 至少 1 个完整可运行示例
· "综合案例与思考"小练习
4. 本章底层原理(简介,详见卷三)
5. 章末新手陷阱 Top 5
6. 思考题(5-10 题)
7. 推荐阅读(卷内 / 跨卷链接)
2
3
4
5
6
7
8
9
10
11
**章末"新手陷阱 Top 5"**是本书相比传统 C++ 教材最大的差异之一——它直接告诉你"哪些代码 编译过 / 跑得通 / 但是错的"。
# 07.如何与卷二、三、四衔接
| 卷一章节 | 卷二对应 | 卷三对应 | 卷四对应 |
|---|---|---|---|
| 第 5 章 复合类型 | — | 第 7 章 STL 容器源码 | — |
| 第 8 章 指针引用 | — | 第 2 章 引用与指针底层 | 第 1 章 BusError 排查 |
| 第 11 章 内存模型 | — | 第 1 章 C++ 内存模型与对象布局 | 第 5 章 内存泄漏排查 |
| 第 9 章 类与对象 | 第 1 章 五法则 | 第 3、4 章 OOP 底层、构造析构 | — |
| 第 10 章 继承多态 | 第 2-3 章 继承体系工程化 | 第 5 章 虚函数表、虚继承 | — |
| 第 12 章 动态内存 RAII | 第 4 章 简易数据库 RAII 实战 | 第 10 章 智能指针原理 | 第 5 章 内存泄漏 |
| 第 14 章 异常处理 | — | 第 13 章 异常处理原理 | 第 2 章 崩溃流程与捕获 |
| 第 15 章 线程和锁 | — | 第 16-17 章 内存序、原子、无锁 | — |
| 第 16 章 STL 模板 | 第 5、9 章 案例使用 | 第 6、7、8 章 STL 与模板原理 | — |
| 第 17 章 预处理器 | 第 13 章 CMake 实战 | 第 20、21 章 编译链接、Modules | — |
| 第 18 章 现代特性图谱 | (索引性章节) | (索引性章节) | (索引性章节) |
读者完成卷一后,可以根据兴趣选择任意一卷继续深入;建议优先级:
工程师: 卷二(项目)→ 卷四(实战)→ 卷三(底层)
学生 / 面试: 卷三(底层)→ 卷四(实战)→ 卷二(项目)
团队 Lead: 卷四(实战)→ 卷二(项目)→ 卷三(底层)
2
3
# 卷首寄语
"学一门语言不难,难的是把它变成你思维的一部分。"
C++ 的入门曲线之所以陡,不是因为它难学,而是因为传统教材从一开始就给你"老 C++"的写法——char *str = "hello"、#define MAX 100、malloc / free、原始数组——等到你真正进项目,才发现工业界早就在用 std::string、constexpr、智能指针、std::vector 了。
本卷会从第一行代码就用现代 C++,让你不必先学一遍"过时的 C++"再忘掉它。
翻开第 1 章,让我们从 C++ 的简史开始。
➡ 下一章:第 1 章 C++ 简史与版本演进
# 08.卷一改造完成度(目录连贯性自检表)
本节记录卷一改造的完整轨迹,便于后续维护与读者交叉参考。
# 8.1 全新创建的章节(3 篇)
| 文件 | 行数 | 角色 |
|---|---|---|
01.Cpp简史.md | ~500 | 第 1 章 |
11.内存模型.md | ~515 | 第 11 章 |
18.特性图谱.md | ~465 | 第 18 章 |
备注:原
A2.开发环境完整搭建.md已并入第 2 章02.基础语法.md的"环境快速验证"部分;环境完整搭建(IDE / 调试器 / CI)将放到**卷二《工程卷》**第 13-15 章详细展开。
# 8.2 增补现代特性的章节(15 篇均加了「卷一改造增补」+「新手陷阱 Top 5」+「推荐阅读」)
| 文件 | 增补主题 |
|---|---|
02.基础语法.md | 现代 Hello World、CMake 模板 |
03.数据类型.md | auto/decltype 推导、std::byte、std::optional、std::variant、std::any、std::string_view、<cstdint> |
04.运算符.md | C++20 三路比较 <=> 与三种比较类别 |
05.复合类型.md | std::array/std::vector/std::span 替代裸数组、std::variant 替代 union、enum class |
06.流程语句.md | if-init、if constexpr、结构化绑定 |
07.函数.md | Lambda 演进、auto 返回、尾置返回、constexpr/consteval、[[nodiscard]] |
08.指针引用.md | nullptr、智能指针、std::span、reference_wrapper |
09.类和对象.md | 五法则 / 三法则 / 零法则、=default / =delete、决策表 |
10.继承多态.md | 四种多态形态、override/final、CRTP、Concepts |
12.动态内存.md | RAII 主线、三大智能指针、循环引用 |
13.IO和文件.md | std::filesystem、std::format、std::print |
14.异常处理.md | noexcept、错误码 vs 异常、std::expected、异常安全级别 |
15.线程和锁.md | std::jthread、四种锁守卫、原子内存序 |
16.STL模版.md | 容器选型决策表、必会算法、Ranges 管道 |
17.预处理器.md | 用 constexpr/if constexpr 替代宏、C++20 Modules |
# 8.3 跨卷锚点链接清单(已校验)
- 卷一 → 卷二:项目实战参考——预留链接(待卷二章节文件就位后补具体路径)
- 卷一 → 卷三:底层原理深入——预留链接(多处使用「卷三第 X 章」描述)
- 卷一 → 卷四:工程实战
# 8.4 卷一统一格式校验
- ✅ 文件名统一为
NN.4-6字.md格式 - ✅ 每篇正文章号(H1 与目录前缀)与文件序号同步:第 N 章 ↔
NN.xxx.md - ✅ 每章节末尾均统一为:主体内容 → 综合思考题 → 卷一改造增补 → 新手陷阱 Top 5 → 推荐阅读
- ✅ 跨章引用全部使用相对路径并已批量校验
# 8.5 后续维护清单
- 卷二开始撰写后,回填 §07 的卷二具体章节链接
- 卷三开始撰写后,回填 §07 的卷三具体章节链接
- 当 GCC/Clang/MSVC 完整支持 C++26 后,更新
18.特性图谱.md增加 C++26 专章