C++ / a working model

LEARNING PATHS / START SMALL

不用一次学完整个 C++。

选一条路线。每次读一篇,运行一个例子,回答一个问题。

本站面向已有基本编程经验、希望系统理解 C++ 或准备语言面试的读者。不是从变量、循环开始的零基础教程,也不是整部标准的替代品。阅读时间包含一次示例阅读,不包含完整练习;下面的安排是学习节奏建议,不是熟练程度保证。

01 / RECOMMENDED

先建立正确的心智模型

每天 25–40 分钟,分 7 次完成。每次只选下面一组,练习答不出就先停下来修改代码。

  1. 对象、存储与生命周期指针与引用:能说清楚谁拥有对象、什么时候失效。
  2. RAII智能指针选择:不用手工清理也能正确释放资源。
  3. 构造与析构顺序拷贝与 Rule of Zero:区分复制值和复制资源句柄。
  4. 移动语义完美转发:解释 std::move 为什么自己不移动。
  5. vector迭代器失效:在修改容器之前判断哪些句柄还能用。
  6. 互斥与锁内存序:画出数据发布的 happens-before 关系。
  7. 编译与链接诊断工具:编译运行,修改例子,解释每条告警。

02 / INTERVIEW REHEARSAL

面试前,练习把答案说完整。

预留 60–90 分钟。每题先独立说 60 秒:结论、机制、边界、例子。不是只背一句定义。

  1. new 与 mallocconststatic:分别回答存储、对象生命周期、链接与作用域问题。
  2. 虚函数与对象模型虚析构:不要把某个 ABI 的布局说成标准要求。
  3. shared_ptrweak_ptr:控制块、循环引用、线程安全的边界。
  4. 哈希容器有序容器算法:复杂度、退化、失效与比较器。
  5. volatile条件变量:数据竞争不是“偶尔数值不对”,条件变量等待必须围绕谓词。

03 / MODERNIZE YOUR C++

已经会 C++11?补上后面的工具。

每次 20–35 分钟,按依赖顺序阅读;文章会标出示例最低标准。

  1. auto 与 decltypelambda变参模板与折叠表达式
  2. 类型萃取编译期求值concepts 与 requires
  3. optional 与 variantstring_view 与 spanranges
  4. 协程C++23 与 expected。先检查标准库和编译器的具体支持情况。

把知识变成一段可运行的代码

本站每篇都提供完整 .cpp 下载和编译命令。建议使用 GCC 或 Clang,先打开 -Wall -Wextra -Wpedantic,按文章指定的 -std= 编译。并发例子需要支持线程的环境;GCC/Clang 在 Linux 上使用 -pthread。浏览器不会执行 C++,复制按钮只复制文本。

运行成功之后,改变一个输入,先预测输出再执行。能解释为什么,才标记“已完成”。进度仅保存在当前浏览器,不同步到服务器,清除浏览器数据后会丢失。

打开完整目录 →