按主题分层命名文件夹,如pointers/stl_vector/move_semantics;每个.cpp文件顶部用3–4行注释说明目的、输入输出和关键点;按语言特性建独立小仓库;用clang-format和cppcheck定期扫描暴露理解盲区。

用文件夹按主题分层,别按日期或“练习123”命名
很多人新建 cpp_01、cpp_02 这类目录,过两周自己都忘了练的是什么。真正有效的整理是让目录名直接反映知识点,比如 pointers、stl_vector、move_semantics。这样下次想查智能指针的 unique_ptr 生命周期,直接进 smart_pointers 文件夹翻,不用 grep 全盘。
建议层级不超过三层:topic/feature/example.cpp,例如:
arrays/
2d_array_init/
row_col_loop.cpp
initializer_list.cpp
strings/
utf8_handling/
mbstowcs_example.cpp
避免在路径里塞版本号或 IDE 名(如 vs2022_strings),C++ 标准特性不依赖 IDE。
每个 .cpp 文件顶部写明目的、输入输出和关键点
光靠文件名不够。一个叫 sort_custom_compare.cpp 的文件,可能实现的是 lambda 比较、函数对象,或重载 operator —— 不看代码根本分不清。所以开头加 3–4 行注释:
// purpose: test std::sort with custom comparator that sorts by string length, then lexicographically
// input: vector<string>{"hi", "hello", "a", "world"}
// output: {"a", "hi", "world", "hello"}
// key: capture-by-value in lambda vs. reference; stable_sort vs sort stability</string>
这些信息比 // practice 2024-05-12 有用十倍。它帮你快速判断这个例子是否还值得重读,也方便以后写博客或复习时直接复用。
别把所有练习塞进一个 git 仓库,按语言特性粒度拆仓
用单个仓库管理全部 C++ 练习,很快会遇到这些问题:
- 每次
git log被无关提交刷屏(比如你改了templates目录,结果看到 200 行 diff 里混着exceptions的旧测试) -
.gitignore难写:有的练习要保留build/,有的纯 header 不需要编译 - 无法单独 fork 或分享某个知识点(比如你想把 RAII 实践发给同事,还得删掉其他几十个目录)
更实际的做法是:按语言机制建独立小仓,例如:
cpp-constexpr-practice/ cpp-ranges-view-chains/ cpp-allocator-custom/
每个仓库只含一个核心概念,README.md 写清编译命令(g++ -std=c++20 -O2)、最小依赖、以及它验证了标准哪条条款(如 [expr.const] p5)。这样未来查资料时,能精准 pull 下来跑,而不是从巨无霸 repo 里手动过滤。
定期用 clang-format 和 cppcheck 扫描,不是为了“整洁”,而是暴露理解盲区
很多人只在交作业前格式化代码。其实 clang-format 的配置本身就在告诉你 C++ 社区怎么读代码 —— 比如它默认把 if (ptr) 的括号对齐,就是在提醒你:空指针检查不该写成 if (ptr != nullptr);cppcheck --enable=warning,style 报出 Variable 'x' is assigned a value that is never used,往往意味着你没真正搞懂 move 语义或返回值优化的触发条件。
建议把这两条加进 Makefile:
check: *.cpp clang-format -i --style=file *.cpp cppcheck --enable=warning,style --std=c++20 *.cpp
执行后不只要看是否报错,更要盯住那些“看似无害”的提示:比如 cppcheck 提示“uninit member: std::string s”,说明你漏写了构造函数初始化列表 —— 这种细节,光靠肉眼 review 很难稳定发现。
目录结构再清晰,代码没经过工具验证,就只是看起来整齐。真正的整理,是让每份练习都能被机器和他人快速验证、质疑、复用。
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!











