Skip to content

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 写法。


📚 第二步:补"原理"(计算机基础)

非科班的缺口主要在这里,建议按顺序补:

  1. 《深入理解计算机系统》(CSAPP) — 程序在机器里到底怎么跑的(链接、加载、内存、并发、IO)。这一本吃透,能解决你 80% 的"原理不懂"
  2. 《现代操作系统》 — 进程 / 线程 / 虚拟内存 / 文件系统,比 CSAPP 操作系统章节更深
  3. 编译原理 — 不用啃龙书,看《编译原理:虎书》或国内简化版,理解 AST、优化、链接即可
  4. 计算机网络 — 如果涉及网络编程,《计算机网络:自顶向下方法》

不要贪多

这几本不要一次全开。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 层(按需)

平台资源
🪟 WindowsMicrosoft Learn(Win32 API、COM、注册表、文件系统)
🐧 Linuxman 2 syscalls / man 3 libc / The Linux Programming Interface
🍎 macOSApple 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::vectorstd::unique_ptr 怎么实现,直接读

一句话总结

C++ 的进阶不是"补语言",而是"补基础" —— 把"查函数"养成习惯、把"原理"读扎实、把"跨平台"用 CMake + Boost 抽象掉,剩下的就是在项目中反复打磨了 ✅