title: C++ 学习路线:从"会用"到"懂原理"
背景
作为非科班出身的 C++ 开发者,最常见的痛点有三个:
- 🧩 原理不熟:知道怎么写,但不知道"为什么这样写"
- 🔍 查函数无门:不记得某个 API 该去哪查
- 🌍 跨平台陌生:Windows / Linux / macOS 各自一套 API,无从下手
本文整理一份自下而上的补齐路线 🎯
🎯 第一步:把"查函数"这件事彻底解决
这是最高频的需求 —— 你不需要背下来,需要的是知道去哪查、查什么。
| 需求 | 去哪查 |
|---|---|
| C++ 标准库(容器、算法、智能指针等) | cppreference.com — C/C++ 查函数的"圣经" |
| 编译器 / STL 实现 | libstdc++ (GCC) / MSVC STL 源码 |
| C++ 标准进展、新特性 | isocpp.org |
| 实测不同编译器表现 | Compiler Explorer (godbolt.org) |
| 编码规范 / 最佳实践 | C++ Core Guidelines |
| 提问 / 搜问题 | Stack Overflow |
习惯养成
遇到不确定的函数,先 cppreference 查原型 / 复杂度 / C++ 版本要求,再上 godbolt 验证行为,最后翻 Core Guidelines 确认是否是 idiomatic 写法。
📚 第二步:补"原理"(计算机基础)
非科班的缺口主要在这里,建议按顺序补:
- 《深入理解计算机系统》(CSAPP) — 程序在机器里到底怎么跑的(链接、加载、内存、并发、IO)。这一本吃透,能解决你 80% 的"原理不懂"
- 《现代操作系统》 — 进程 / 线程 / 虚拟内存 / 文件系统,比 CSAPP 操作系统章节更深
- 编译原理 — 不用啃龙书,看《编译原理:虎书》或国内简化版,理解 AST、优化、链接即可
- 计算机网络 — 如果涉及网络编程,《计算机网络:自顶向下方法》
不要贪多
这几本不要一次全开。CSAPP 先精读完,工作里 80% 的场景都用得到。剩下的当工具书查。
🛠️ 第三步:补"C++ 本身"的深度
你已经会用 C++,所以不必从《C++ Primer》从头看。挑进阶书:
| 阶段 | 书目 | 解决什么问题 |
|---|---|---|
| 基础巩固 | 《C++ Primer》选读薄弱章节 | 弥补语法死角 |
| ⭐ 必读 | 《Effective Modern C++》 | C++11/14 避坑,写出 idiomatic 代码 |
| ⭐ 必读 | 《Effective C++》 | 经典 55 条准则 |
| 进阶 | 《Effective STL》 | STL 容器 / 算法选择 |
| 进阶 | 《C++ Concurrency in Action》 | 多线程、内存模型、原子操作 |
| 高阶 | 《C++ Templates》 | 模板元编程、SFINAE、concepts |
🌍 第四步:补"跨平台"知识
跨平台分两层:语言 / 库层 和 系统 API 层。
语言 / 库层(先学)
- CMake — 跨平台构建的事实标准,强烈建议看 官方教程 + 实战一个小项目
- vcpkg / Conan — C++ 包管理器,避免重复造轮子
- Boost — 跨平台 C++ 库的"标准扩展",看 Boost 文档 了解都有啥
系统 API 层(按需)
| 平台 | 资源 |
|---|---|
| 🪟 Windows | Microsoft Learn(Win32 API、COM、注册表、文件系统) |
| 🐧 Linux | man 2 syscalls / man 3 libc / The Linux Programming Interface |
| 🍎 macOS | Apple Developer Documentation |
| 📐 POSIX 标准 | opengroup.org |
跨平台编码准则
优先用标准库和 Boost 能解决的部分;必须用系统 API 时,用条件编译 #ifdef _WIN32 / __linux__ / __APPLE__ 分支处理。
🚀 可执行的起步方案
不要一次全学。按这个时间表,每个阶段至少一个小项目练手:
text
本周 收藏 cppreference、godbolt、C++ Core Guidelines
每次写代码前养成查表习惯
1-2 个月 精读 CSAPP 前 8 章,每章末尾有 lab 跟着做
穿插读《Effective Modern C++》
2-3 个月 用 CMake + vcpkg 写一个跨平台小项目
比如跨平台日志库、文件监控工具
之后 按工作方向选读
《C++ Concurrency in Action》或《C++ Templates》💡 额外建议:读开源项目源码
读源码比看书更能补"原理"。推荐几个代码量小、风格好的项目:
- fmt — 现代 C++ 格式化库
- spdlog — 高性能日志库
- Catch2 — 测试框架
- libstdc++ / libc++ / MSVC STL 源码 — 想看
std::vector、std::unique_ptr怎么实现,直接读
一句话总结
C++ 的进阶不是"补语言",而是"补基础" —— 把"查函数"养成习惯、把"原理"读扎实、把"跨平台"用 CMake + Boost 抽象掉,剩下的就是在项目中反复打磨了 ✅