这一版是 v0.8.0 之后攒下来的全部,中间那个 v0.8.1 patch(std::sort 的一处小修)没单独发 release,内容并到这里。主线有三条:卷四的模板编程铺开了两个子卷、卷二的移动语义和智能指针两个子卷做了实测重写、卷十接上一篇 CppCon 2025 的 std::optional 笔记。社区这头也热闹,owollz4 把 C 语言系统教程各章的练习参考答案从第二章一路补到了第十一章。
卷四之前是几篇零散文章(协程、EBO、spaceship、modules)平铺在根目录,这一版按标准版本拆成子卷骨架,先把内容最厚的两个子卷填了进去。
从模板是什么一路讲到 CRTP 和 fixed_vector,十篇正文配英文全套,加四个独立示例(comparable_mixin / crtp_static_polymorphism / fixed_vector / type_traits_from_scratch)。覆盖函数模板、类模板、全特化与偏特化、非类型参数、名字查找与 ADL、Barton-Nackman 技巧、别名 using,最后用 CRTP 落到一个固定容量 vector 上。
C++20 的 concepts 子卷开了前三篇:Concepts 详解(四种语法形式、和 enable_if 的报错对比、标准库概念)、约束模板(subsumption 与重载、原子约束的真包含关系)、requires 表达式(四种成分、不求值语境、硬错误坑)。配九个示例,报错演示用 -D 宏切换。
ch00 移动语义和 ch01 智能指针两个子卷整章过了一遍。这次的重点是实测:把原文里和 GCC 16 实测对不上的地方挑出来重写,文字润色是顺带的。
ch00 移动语义(#105 + #124):右值引用和移动语义两篇先做了第一轮补例(#105),随后 #124 把 benchmark 数据的硬伤修了——原文写「285ms / 快 3 倍」,和实测对不上,重跑后按真实数据重写;noexcept 那段原本缺 ThrowingType,代码和输出对不上,补全了;顺手清掉一个空目录死链,加了两个在线编译演示(push_back_emplace、noexcept_sort_vs_realloc)。
ch01 智能指针六篇(#124):人称统一(笔者/咱们/您)、删掉「## 小结」换成承接、清 AI 味词、工具链统一到 GCC 16。实测硬伤修了一批:
raii-deep-dive:exit 验证段缺main,给了输出却链接不过。unique-ptr:sizeof代码里缺StatefulDeleter,但输出里有;另有 5 处死链和一个 PIMPL 死链。weak-ptr:lock()实测比直接访问慢约 32 倍,原文写 10–15 倍,把直接访问的耗时写高了。custom-deleter:11 处死链、末尾整段「## 验证代码」死链,外加 535–536 两行重复。scope-guard:验证段死链。
新增三个示例(noexcept_sort_vs_realloc.cpp / move_benchmark.cpp / push_back_emplace.cpp),都过 GCC 16 编译。英文同步了 ch00/05 和 ch01 的 01–04。
Steve Downey 在 CppCon 2025 的《The Evolution of std::optional: From Boost to C++26》拆成六篇深度笔记,主线是 optional<T&>(P2988)从 2005 年提出、到 2025 年 Sofia 会议投票通过进 C++26 的二十年历程。讲清楚了几路争议:三重身份、assign-through 和 rebind 之争、赋值重绑定、浅层 const、移动语义的坑,以及 The Beman Project 在标准化里到底扮演什么角色。所有 optional<T&> 代码在 GCC 16.1.1 -std=c++26 实跑,附赋值汇编。写作时顺手修正了原始素材里的 CTAD 误断和 Beman 拼写,接进了 2025 目录页。
这一版收到社区贡献者 owollz4 的一整批来稿,把 C 语言系统教程(documents/vol1-fundamentals/c_tutorials/)各章的练习题参考答案补齐,从第二章的数据类型与溢出,一路写到第十一章的预处理。覆盖范围:
- 第二、三章:数据类型、整型溢出、运算符、位运算的练习答案(#108)。
- 第四、五章:控制流相关练习(#114)。
- 第六、七章:作用域与存储类别、指针基础(#117)。指针那章的答案额外过了一遍
-Wall -Wextra -std=c17,把%d改%zu、%p加(void*)强转等触发警告的地方都修了。 - 第八章:作用域与存储类别的练习(#121)。
- 第十、十一章:结构体与联合、预处理(#125)。
另外 #104 给第六章的状态机示例代码补了一轮注释,把「几个负载」改成更贴代码的「几个字节」、kStateHeader 修正为「帧头已收完,接下来等长度字节」。笔者这边配合做了一轮 review,修了来稿代码里几处可能 segfault 和隐式声明的问题。
- 浮点那篇重写了(#107):
c_tutorials/02B-float-char-const-cast的解释和示例都更新了,新增c_float_representation示例(中英各一份),把浮点表示讲得更清楚。 - 函数模板修正(#111):
ch09/01-function-templates里几处误导性表述重写了,中英同步。 std::sort小修(#118,issue #116):ch11/03-algorithms-intro一处描述,两行。这个就是 v0.8.1 patch 的内容。
之前 mermaid 图只能看原尺寸,想看清细节得眯着眼。这一版接了 @panzoom/panzoom:内联挂一个 maximize 按钮(用 ResizeObserver 判断溢出,不溢出的图不显示按钮),点开进全屏模态,支持滚轮缩放和拖拽。模态走 Teleport 范式,clone 一份 SVG 出来挂 panzoom,不动原文档。新增 MermaidLightbox.vue(213 行)、mermaid-lightbox.ts,样式进 custom.css。
- cpp-reference 速查卡新增两张(#100):容器类补了
std::mdspan(C++23 多维数组视图),核心语言类补了std::stacktrace(C++23 调用栈捕获)。roadmap 页也跟着调了一下。 - c_tutorials 示例代码重组(#126):
code/volumn_codes/vol1/c_tutorials/下的 C 示例重新整理了一遍,把零散的示例合并、统一命名(比如ex1_float_precision改ex1_float_epsilon、ex1_bit_toolkit改ex1_bit_ops),删掉冗余的,净减约 40 个文件。顺手补了 pre-commit 钩子配置。
跟着内容主线走:卷四两个新子卷(vol1-basics 全套、vol3-metaprogramming concepts 三篇)英文上线,卷二 ch00/05 移动语义和 ch01 智能指针 01–04 英文同步,卷十 std::optional 六篇中英对齐。卷一的函数模板(#111)和浮点(#107)修正也带上了英文。
感谢这几位朋友!