C++编码规范
一、命名规范
- 文件名:全小写,单词间用下划线,如 graph_bfs.cpp、union_find.h。
- 类/结构体/枚举:大驼峰,如 GraphNode、UnionFind、EdgeType。
- 函数/方法:大驼峰,动词开头,如 ComputeShortestPath、FindRoot。
- 变量:小写蛇形,如 edge_count、dist、parent。
- 常量:constexpr 或 const,以 k 开头,如 kMaxN、kInf。
- 成员变量:小写蛇形,尾部加下划线,如 node_count_、adj_。
- 命名空间:全小写,如 namespace graph_utils {}。
- 宏:全大写下划线,如 MAX_N,但优先用 constexpr 替代宏。
二、注释规范
- 文件头注释:说明文件名、功能、作者/学号、日期。
- 函数注释:说明用途、参数、返回值,并必须写出时间复杂度和空间复杂度。
- 类注释:说明类的作用、主要成员和线程安全等注意事项。
- 行内注释:解释“为什么这样做”以及复杂边界条件,不重复代码字面意思。
- 算法变量注释:如 dist[i] 表示源点到 i 的最短距离,parent[i] 表示并查集父节点。
三、格式与文件组织
- 缩进:统一 4 个空格,禁止 Tab。
- 行宽:一般不超过 80 或 100 字符。
- 大括号:采用 K&R 风格,左括号不换行:
if (condition) { DoSomething(); } - 空格:运算符两侧、逗号后、控制语句括号前加空格。
- 空行:函数之间空一行,逻辑块之间可空一行。
- 头文件:使用 #pragma once 或 #ifndef 保护;头文件中禁止 using namespace std;。
- include 顺序:对应头文件 → C 系统头文件 → C++ 标准库 → 第三方库 → 本项目头文件。
四、C++ 语言特性与资源管理
- 用 const、constexpr 代替 #define。
- 用 nullptr 代替 NULL。
- 用 enum class 代替普通枚举。
- 用 std::vector、std::string、std::array 代替裸数组和裸指针。
- 内存管理优先使用 std::unique_ptr、std::shared_ptr,遵循 RAII;避免裸 new/delete。
- 函数参数:输入用 const T&,输出用指针或引用。
- 单参数构造函数加 explicit;重写虚函数加 override,禁止重写加 final。
- 类型转换使用 static_cast、dynamic_cast,避免 C 风格强制转换。
- 使用范围 for 和 auto 简化迭代器代码,但不滥用 auto。
- 优先使用 STL 算法,如 std::sort、std::lower_bound、std::priority_queue。
五、算法作业特定规范
- 复杂度标注:每个算法函数必须注明 // Time: O(n log n), Space: O(n)。
- 数据范围:用 constexpr int kMaxN = 1e5 + 10; 定义上限,注意 long long 防溢出。
- 输入输出:使用 std::ios::sync_with_stdio(false); std::cin.tie(nullptr); 加速。
- 模块化:main 只负责输入输出,核心算法封装为独立函数。
- 边界条件:处理空输入、单元素、不可达、重边、自环等情况。
- 测试:至少给出样例测试和边界测试,并在报告中说明算法思路与复杂度分析。
六、总结
本学期我的 C++ 编码规范可概括为:命名清晰、注释到位、格式统一、资源安全、算法高效、提交规范。核心目标是让代码不仅能够正确运行,而且具备良好的可读性、可维护性和可分析性,尤其满足算法设计与分析作业对复杂度说明和边界处理的要求。

浙公网安备 33010602011771号