写作模板
# 00.专栏写作模板
本文件用于规范《C++ 核心原理深度专栏》全 60 篇的统一写作风格。 每写一篇新文章前,请先对照本模板检查骨架是否齐全。
# 一、文件命名与编号
- 命名格式:
NN.标题(不超过20个汉字).md - 编号 NN 为两位数,从 01 开始,全册按卷顺序连续编号至 60
- 标题要"动宾结构 + 落点",避免空泛(❌ "C++ 容器" → ✅ "vector扩容真相")
- 二级标题、三级标题:最少 6 字,最多 9 字,对仗工整
# 二、骨架结构(10 章法)
每篇文章必须包含以下 10 章,缺一不可:
1. 案例引入 ← 真实线上事故 / 反直觉代码片段,制造悬念
2. 架构概览 ← 一张总图 + 一段"为什么这么切"的反向论证
3~9. 核心原理拆解 ← 5~7 章,每章一个独立子主题,章内 4~9 节
每章至少包含:源码/汇编/数据结构图 + "疑惑—论证—结论" 段
10. 综合案例串讲 ← 必须回扣第 1 章的案例,逐一回答第 1 章的所有疑问
并升华出 3~4 条"设计哲学"
1
2
3
4
5
6
2
3
4
5
6
核心原则:第 1 章埋的所有疑问,第 10 章必须全部回答。中间章节是"取证过程"。
# 三、目录骨架(直接复制套用)
# NN.文章标题
#### 目录介绍
- [1. 案例引入](#1-案例引入)
- [1.1 一段反常代码](#11-一段反常代码)
- [1.2 顺藤摸到根因](#12-顺藤摸到根因)
- [1.3 我们要回答什么](#13-我们要回答什么)
- [2. 架构概览](#2-架构概览)
- [2.1 三大子模块](#21-三大子模块)
- [2.2 为什么这么切](#22-为什么这么切)
- [3. XXX 子主题](#3-xxx-子主题)
- [3.1 ...](#31-)
...
- [10. 综合案例串讲](#10-综合案例串讲)
- [10.1 案例真相揭晓](#101-案例真相揭晓)
- [10.2 一个 X 的一生](#102-一个-x-的一生)
- [10.3 设计哲学回扣](#103-设计哲学回扣)
- [10.4 速查表](#104-速查表)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 四、写作风格红线
# 4.1 语气与人称
- 用 "我们" 不用 "你/笔者"——拉近距离,把读者当同行
- 句末**避免"了哦呢嘛"**等弱化语气词
- 关键结论用
**加粗**,给读者打靶子
# 4.2 论证模式(重点)
每个核心原理点必须按 "疑惑 → 论证 → 结论" 三段式展开:
**疑惑**:为什么 std::vector 默认按 1.5 或 2 倍扩容?
**论证**:
1. 假设按固定增量 +K 扩容,n 次 push_back 总拷贝代价是 O(n²),摊还不掉
2. 按几何级数 ×g 扩容,n 次 push_back 总拷贝代价 ≈ n·g/(g-1),摊还 O(1)
3. g=2 摊还代价最低(2.0),但已释放空间永远小于新空间——无法复用
4. g=1.5 时,第 k 次扩容后释放的空间 < 之前累计释放总和——可被分配器复用
5. 反向验证:MSVC 选 1.5,libstdc++/libc++ 选 2.0,是「内存复用」与「拷贝次数」的不同权衡
**结论**:扩容因子既不是经验值也不是巧合,是「摊还复杂度 × 内存复用率」联合最优化的产物。
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
严禁直接抛结论("vector 按 2 倍扩容是因为快")——读者要的是推导过程。
# 4.3 图示要求
- 内存布局、对象模型、流程必须配 ASCII 图(用 Unicode 框线 ┌─┐│└─┘)
- 多分支决策用 mermaid 流程图
- 表格用于横向对比(≥3 项时)
- 每个核心子章节至少有 1 个图或表
# 4.4 代码片段
- C++ 代码必须可编译(带
#include/ 命名空间) - 反汇编用 真实 godbolt 产物(gcc/clang/msvc 任一),不要手写
- 注释用中文,贴在被解释行的右侧或上方
- 单段代码 不超过 50 行,超过就拆
- 尽量给出最小复现 (MCVE),标注编译器版本与编译参数
# 五、综合案例(第 10 章)三件套
| 子节 | 内容 | 示例 |
|---|---|---|
| 10.1 案例真相揭晓 | 逐条回答第 1 章的疑问 ①②③④⑤⑥ | "回到 OrderQueue 的崩溃,6 个疑问现在能逐条作答了..." |
| 10.2 一个 X 的一生 | 把核心实体的完整生命周期串成一棵树 | "auto p = std::make_shared |
| 10.3 设计哲学回扣 | 升华 3~4 条跨篇适用的设计原则 | "零开销抽象 / RAII / 值语义优先 / 编译期前移" |
| 10.4 速查表 | 一张可截图保存的总结表 | 各值类别 / 各内存序 / 各特殊成员函数生成规则 |
# 六、章节自检清单
写完一篇后,逐条对照:
- [ ] 第 1 章是真实线上代码吗?不是教科书例子?
- [ ] 第 1 章末尾是否列出了 5~7 个待解答的疑问?
- [ ] 中间章节每章是否有"疑惑—论证—结论"段?
- [ ] 中间章节是否每章都至少有 1 个图或表?
- [ ] 第 10.1 节是否逐条回答了第 1 章的疑问?
- [ ] 第 10.2 节是否串起本篇 80% 以上的知识点?
- [ ] 第 10.3 节是否提炼出可迁移的设计哲学?
- [ ] 全篇标题是否 6~9 字且对仗?
- [ ] 是否过渡到下一篇?("下一篇我们顺着 XXX 这条线,进入 NN+1 篇")
# 七、章节数与篇幅参考
| 项 | 推荐区间 |
|---|---|
| 总章数 | 10 章(固定) |
| 每章节数 | 4~9 节 |
| 总字数 | 1.2~2 万字 |
| 总行数 | 800~1500 行(含代码与图) |
| 代码 / 图 / 表占比 | 30%~40% |
# 八、写作前置 SOP
flowchart LR
A[选题] --> B[找一段真实代码<br/>作为开篇案例]
B --> C[列出 5~7 个疑问<br/>这就是中间章节的提纲]
C --> D[每个疑问对应一个章节<br/>规划 3~9 共 7 章]
D --> E[按"疑惑→论证→结论"<br/>填充每一节]
E --> F[第 10 章逐一回扣案例<br/>升华设计哲学]
F --> G[自检清单逐项过]
G --> H[更新 README 状态]
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 九、参考标杆
第 02 篇 02.对象内存布局原理.md 是本模板的完整范本(C++ 专属六项要求全覆盖),新写文章遇到结构疑问时,优先回看 02 篇对应位置。
# 十、C++ 专属要求(区别于 Java 专栏)
| 要求 | 说明 |
|---|---|
| 底层下沉一层 | 凡涉及对象/内存/调用,必须给出对应汇编(x86-64 优先),用 godbolt 链接或片段佐证 |
| 多编译器视角 | 关键差异处对比 GCC / Clang / MSVC 三家实现(如 std::string SSO、异常 ABI) |
| C++ 标准演进 | 标注 C++03/11/14/17/20/23 中的引入版本与 paper 编号(如 P0848R3) |
| 零开销证据 | 凡声称「零开销抽象」处,必须有反汇编对比,不能口说无凭 |
| UB 警示 | 涉及未定义行为的写法必须显式标红,并指出哪条标准条款([basic.lval]/[expr.lifetime]) |
| 跨平台注意 | Linux/macOS/Windows 行为差异(如 thread_local 析构、动态库符号导出) |
上次更新: 2026/06/10, 11:13:41