一些C++的学习资料备忘
一、入门与练习
-
cppreference(在线参考)- 仓库/站点:https://en.cppreference.com/w/ (不是单仓库,但必备)
- 难度:入门 → 全程参考
- 学习重点:标准库、标准头文件、语言语法差异、示例代码。
- 开始:遇到语法或 std::vector/std::string 等用法时查文档并跑示例。
-
C++ Core Guidelines(官方风格/安全/现代 C++ 指南)- 仓库:https://github.com/isocpp/CppCoreGuidelines
- 难度:入门 → 中级(长期参考)
- 学习重点:现代 C++ 的最佳实践、所有权与生命周期建议、错误处理等。
- 第一个任务:阅读 “C.1 Resource Management” 等章节并在本地做笔记;为其中一个示例补充中文注释或示例测试。
-
cpp_starter_project(入门项目模板)- 仓库:https://github.com/lefticus/cpp_starter_project
- 难度:入门
- 学习重点:CMake 项目结构、单元测试(Catch2)、CI、代码风格、模板工程如何组织。
- 开始:clone,按 README 用 cmake 构建并运行 tests。
- 第一个任务:在 examples 中加入一个小程序并提交 docs/README 的改进。
二、工具链与开发体验
-
fmt(格式化库,类似 Python 的 f-string 支持)- 仓库:https://github.com/fmtlib/fmt
- 难度:入门 → 中级
- 学习重点:模板元编程、format API、构建库的最佳实践、CI 流程。
- 第一个任务:构建并运行 examples,找一个 “good first issue” 做文档或单测补充。
-
googletest(Google 的 C++ 测试框架)
- 仓库:https://github.com/google/googletest
- 难度:入门
- 学习重点:单元测试写法、mock、CI 集成。
- 第一个任务:为某个示例添加断言或改进 README 的构建说明。
-
clangd / clang-format / clang-tidy(工具链、静态分析、格式化)
- 仓库:https://github.com/clangd/clangd 及 https://github.com/llvm/llvm-project(包含 clang)
- 难度:中级
- 学习重点:静态分析、代码修复建议、IDE 集成(VSCode/CLion)。
三、常见库与实战项目
-
TheAlgorithms / C++(各种算法实现集合)
- 仓库:https://github.com/TheAlgorithms/C-Plus-Plus
- 难度:入门 → 中级
- 学习重点:常见数据结构与算法实现、测试、代码风格、如何把数学/伪代码变成可运行代码。
- 第一个任务:实现一个未实现的算法或为现有实现补充单元测试 / 修复 README 示例。
-
spdlog(日志库,基于 fmt)
- 仓库:https://github.com/gabime/spdlog
- 难度:中级
- 学习重点:高性能日志、模板与类型擦除、跨平台支持。
- 第一个任务:运行示例并为某个边缘情况添加测试或文档示例。
四、AI 相关(C++ 在底层与高性能组件)
-
OpenCV(计算机视觉库)- 仓库:https://github.com/opencv/opencv
- 难度:中级 → 高级(某些模块)
- 学习重点:图像处理算法实现、性能优化、跨语言绑定(Python/C++)、构建大型 CMake 项目。
- 第一个任务:运行 tutorials 中的例子,为某个小模块补充示例或修复文档。
-
dlib(通用 ML 库 & 工具)- 仓库:https://github.com/davisking/dlib
- 难度:中级
- 学习重点:数值优化、C++ 模板、跨平台兼容性。
- 第一个任务:在 examples 中运行 demo 并修复或改进 README 中的构建步骤(很好的初学者任务)。
-
tiny-dnn(轻量级神经网络库,教学用途)- 仓库:https://github.com/tiny-dnn/tiny-dnn
- 难度:中级
- 学习重点:NN 基本结构、前向/反向传播的实现细节(适合从头理解推理与训练)
- 第一个任务:增加一个小的 example 或补充一个运算子的小测试。
五、系统 / 操作系统 / 大型 C++ 项目(读源码学系统)
-
SerenityOS(用 C++ 写的大型桌面操作系统)
- 仓库:https://github.com/SerenityOS/serenity
- 难度:高级(但非常适合读源码)
- 学习重点:系统级 C++、内核/用户空间交互、图形子系统、工具链与构建脚本。
- 开始:按 README 在 Linux 上构建并在 VM 中运行。
- 第一个任务:从 docs 或者 build 脚本入手,尝试运行 demo,然后挑一个小的 “good first issue” 做文档/样例改进。
-
Chromium(浏览器,大量 C++)
- 仓库:https://chromium.googlesource.com/chromium/src/ (非常大,仅建议长期学习)
- 难度:高级
- 学习重点:大型工程构建系统、跨平台、网络、渲染管线。
- 第一个任务:不建议直接 PR,先阅读构建文档并做本地构建实验。
六、游戏 / 图形(实时系统与性能)
- Godot Engine(核心使用 C++)
- 仓库:https://github.com/godotengine/godot
- 难度:中级 → 高级
- 学习重点:渲染、引擎架构、资源管理、插件系统。
- 第一个任务:运行编辑器构建,修复一个简单的 bug 或改进文档/示例项目。
七、生态与资源汇总
awesome-cpp(资源索引)- 仓库:https://github.com/fffaraz/awesome-cpp
- 难度:全级别(检索用)
- 学习重点:快速定位库、教程和工具。
八、如何快速开始
- 安装工具链:安装 clang 或 g++(建议同时装 clang),CMake,git。Windows 下可选 MSVC + Visual Studio 或 MinGW/Cygwin;macOS 推荐 Homebrew 安装。
- 推荐编辑器:VSCode + clangd / clang-format;或者 CLion(付费)。安装 clangd 以获得智能提示与重构。
- 学习顺序(边学边做):读一本入门书(C++ Primer 或 A Tour of C++),同时用 cpp_starter_project 搭一个最小模板并练习写小程序(文件 I/O、STL、类、智能指针)。
- 克隆目标仓库:git clone ,阅读 README → 构建(mkdir build; cd build; cmake …; cmake --build .)→ 运行 tests/examples。
- 参与开源:找带 “good first issue” 的 issue 或 docs/tests 小修复,从文档、examples、CI 修复入手。提交 PR 时注意项目的贡献指南(CONTRIBUTING.md)和代码风格(clang-format)。
九、第一次 PR 的一般流程(适用于任意 C++ 仓库)
- fork -> clone -> 新分支(git checkout -b fix/xxx)
- 本地构建并运行测试(确保 CI 会通过)
- 做小改:docs、修复拼写、补充 build 指南、添加单元测试或简单 bug 修复
- 遵循格式化和风格(运行 clang-format)
- 提交并发起 PR,写明变更原因、如何测试、相关 issue 链接
- CI 失败时按错误修复并更新 PR
十、6 周学习 + 贡献计划(假设每周 ~30h)
- 第 0 周(准备,4–8h):安装工具链、VSCode + clangd、CMake、git,熟悉 IDE 与调试器。
- 第 1 周(60–80h 总时中分配约 30h):语言基础与 STL(变量、函数、类、智能指针、RAII、异常、模板、容器、范围 for、算法、迭代器)——读 A Tour of C++ + cppreference,做 10 个小练习(文件处理、字符串、vector 排序等)。
- 第 2 周(30h):学习现代 C++ 特性(移动语义、右值引用、lambda、constexpr、模板元编程入门)、并用 cpp_starter_project 搭一个小项目(CLI 工具,例如文本统计器)。提交第一个小 PR(在 TheAlgorithms 或 cpp_starter_project 做贡献)。
- 第 3 周(30h):工具链、构建系统与测试(CMake、googletest、clang-format、clang-tidy),把第 2 周项目加上单元测试并在 GitHub 上建 repo 并添加 CI(GitHub Actions)。尝试在 fmt 或 googletest 找一个 good-first-issue 并提交 PR(主要是 docs/tests)。
- 第 4 周(30h):读一个你感兴趣的中型项目源码(OpenCV 的一个模块 或 SerenityOS 的某一部分),按 README 在本地构建并跑 example。定位一个文档类或小 bug 并尝试修复。
- 第 5 周(30h):加深算法和性能(profile、内存管理、缓存友好性、并行化基础),在 TheAlgorithms 或 OpenCV 上做更深入的小改(性能测试或增加示例)。
- 第 6 周(30h):做一个稍大型练手项目(例如用 OpenCV 做一个小的图像分类/处理 demo,或实现一个小型神经网络推理模块),并把项目整理成可复现的仓库,编写 CONTRIBUTING 与 CI,向一个你读过源码的目标仓库提交第二个 PR(可以是功能改进或测试覆盖)。
十一、建议的 6 个优先学习/贡献仓库
- TheAlgorithms/C-Plus-Plus — https://github.com/TheAlgorithms/C-Plus-Plus (入门实现与贡献非常友好)
- fmt — https://github.com/fmtlib/fmt (库级贡献、测试、示例)
- googletest — https://github.com/google/googletest (学习测试、提交测试相关 PR)
- OpenCV — https://github.com/opencv/opencv (AI/图像处理方向的实战)
- dlib — https://github.com/davisking/dlib (ML 算法与 C++ 实现)
- SerenityOS — https://github.com/SerenityOS/serenity (系统级大型 C++ 项目,适合读源码)
