Skip to content

C++ 学习路径 ​

C++ 面试不是把语法点平铺背完,而是建立一条从语言规则 → 对象与资源 → 标准库与泛型 → 并发与工程的主线。本文是 C++ 模块入口:首次学习按推荐顺序阅读;面试前可按“问题定位”直接跳到相关页面。

从哪里开始 ​

不需要一次读完所有内容。推荐先完成前三阶段,能够覆盖多数 C++ 基础面试题;再根据目标岗位补齐并发、性能、诊断和系统接口边界。

推荐学习顺序 ​

1. 语言与程序基础:先知道代码如何存在和运行 ​

  1. 基础、存储期与内存:作用域、存储期、static、const、栈帧、内存布局;
  2. 类型推导、值类别与语言规则:auto、decltype、值类别、默认实参、重载、mutable、string_view;
  3. C++ 翻译、链接与 ABI:预处理、翻译单元、ODR、静态/动态库和 extern "C"。

完成标准:能区分作用域、存储期与链接属性;能解释一个 .cpp 如何成为可执行程序;不把“栈/堆”当作 C++ 生命周期的唯一描述。

2. 对象、资源与抽象:C++ 最核心的工程能力 ​

  1. 面向对象与多态:封装、继承、虚函数、构造/析构与覆盖;
  2. 指针、资源与智能指针:所有权、RAII、unique_ptr、shared_ptr、生命周期;
  3. 异常安全、栈展开与资源清理:基本/强/不抛异常保证与资源回收;
  4. 对象模型、RTTI 与多态设计:多重/虚继承、dynamic_cast、variant 的边界;
  5. 字节操作与 C API 边界:void*、对象生命周期、memcpy/memmove、C 字符串与对齐。

完成标准:能先说清资源由谁拥有、何时释放,再讨论指针或多态;能解释为什么多态基类通常需要虚析构函数。

3. 标准库、现代特性与泛型:让代码既正确又表达清楚 ​

  1. STL 容器:容器选择、扩容、哈希、迭代器失效;
  2. STL 算法与数据聚合模式:算法优先、比较器、聚合和受控并发读取;
  3. 现代 C++:移动语义、noexcept、Lambda 与闭包;
  4. 模板、Concepts 与 C++20:实例化、SFINAE、Concepts、Ranges 和协程。

完成标准:能根据访问模式选择容器,知道迭代器失效条件;能解释 std::move 只是值类别转换,模板代码为何通常放在头文件。

4. 并发、异步与运行期工程:在正确性基础上处理真实负载 ​

  1. 并发与多线程:锁、原子、内存序、条件变量、队列和线程池;
  2. 回调、线程生命周期与异步任务:std::function、回调生命周期、jthread、async;
  3. 缓存友好与性能设计:数据布局、批处理、测量与优化边界;
  4. 调试、Core Dump 与运行期诊断:GDB、core、Sanitizer 与故障定位。

完成标准:能先用锁和 RAII 给出正确方案,再讨论无锁;能区分性能猜测与压测/剖析结论。

5. 设计专题:放在主线之后理解取舍 ​

  • 单例模式:唯一性、全局状态、可测试性、生命周期与依赖注入。

单例不是“基础语法题”,应在掌握所有权、静态初始化和并发边界后再讨论其适用性。

版本策略:C++17 主线,C++20–26 分层扩展 ​

本站示例默认以 C++17 为面试和工程基线;若使用更高版本特性,会在对应页面明确写出版本与实现边界,而不是让读者误以为所有编译器都可直接使用。

层级学习定位优先关注的主题
C++17:主线必学大多数项目和面试可直接使用的共同基础结构化绑定、if 初始化、inline static、optional/variant/any、string_view、文件系统、std::pmr
C++20:重要进阶新项目与中高级岗位常见Concepts、Ranges、协程、jthread/停止令牌、span、format、模块、三路比较
C++23:按需补充库能力和表达力增强expected、mdspan、print、stacktrace、move_only_function 等
C++26:前沿扩展以工具链支持为前提,不作为基础回答前提合同、静态反射、执行模型及新增容器/库能力等;使用前检查编译器、标准库和 feature-test macro

学习时先写出 C++17 可工作的方案,再回答“高版本如何简化”。涉及 C++23/26 时,应主动说明:标准版本、编译器/标准库支持情况,以及是否需要 feature-test macro 兜底。

按问题快速定位 ​

你想解决的问题优先阅读
变量何时创建、销毁,static / const 有何区别基础、存储期与内存 → 语言规则
new、智能指针、悬空指针和 RAII 如何解释指针、资源与智能指针 → 异常安全
虚函数、虚析构、RTTI、多继承怎么回答面向对象与多态 → 对象模型与 RTTI
该选 vector、map 还是 unordered_mapSTL 容器
移动语义、Lambda、模板、Ranges 或协程现代 C++ → 模板、Concepts 与 C++20
线程安全、队列、原子和内存序并发与多线程
崩溃、泄漏、未定义行为和性能问题运行期诊断 → 性能设计
要与 C 库、字节缓冲区或 ABI 交互字节操作与 C API 边界 → 翻译、链接与 ABI

面试复习方法 ​

每完成一个阶段,按同一模板复述一个知识点:

  1. 结论:它解决什么问题;
  2. 机制与不变量:语言或库保证什么、自己必须维护什么;
  3. 复杂度/生命周期/并发边界:代价和失效条件是什么;
  4. 工程选择:何时使用、何时换成更简单或更安全的方案;
  5. 追问:列出一个常见误区并给出修正。

这样阅读路径既可用于从零建立框架,也可在面试前沿着侧边栏按阶段快速查漏补缺。

使用 Markdown 与 VitePress 构建