hi,我又来啦,记得点赞哦,
(我还会在bilibili上更新minecraft)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1. 可读性与可维护性
这是最核心的特征。代码是写给人看的,只是顺便让机器执行。
* 有意义的命名:变量、函数、类名都清晰地表明了其意图。
* calculateAverageScore() 而不是 calc() 或 func1()
* std::vector<Student> m_students; 而不是 std::vector<Student> v;
* 一致的代码风格:缩进、空格、大括号位置等在整个项目中保持一致。
* 例如,使用 Allman 风格 {} 还是 K&R 风格 {}。
* 适当的注释:
* “为什么”而不是“做什么”:好的注释解释代码背后的意图、算法选择的原因或某些复杂逻辑的背景。
* 文件/类/函数头注释:说明目的、作者、参数、返回值和可能的副作用。
* TODO/FIXME/NOTE:标记待办事项或需要特别注意的地方。
* 避免魔法数字/字符串:使用具名常量或枚举来代替直接出现在代码中的字面量。
* const int MAX_BUFFER_SIZE = 1024; 而不是直接使用 1024。
* enum class Color { Red, Green, Blue }; 而不是使用 0, 1, 2。
2. 结构与组织
人类代码是经过设计的,而不是随意堆砌的。
* 模块化与分解:将复杂问题分解为小的、可管理的函数和类。
* 遵循单一职责原则:一个函数或类只做一件事。
* 合理的层次结构:代码被组织在命名空间、头文件(.h/.hpp)和源文件(.cpp)中,以分离接口和实现。
* 适度的抽象:使用类、模板和继承来创建抽象,但不会过度设计。抽象是为了简化问题,而不是炫耀技巧。
* 设计模式的应用:在适当的地方会使用如工厂模式、观察者模式、RAII等经典设计模式来解决特定问题。
3. 资源管理与安全性
C++赋予程序员强大的权力,也意味着对资源管理的重大责任。
* RAII:这是C++的核心 idiom。资源(内存、文件句柄、锁等)的获取在构造函数中完成,释放则在析构函数中完成。这确保了异常安全。
* 使用 std::unique_ptr, std::shared_ptr 而不是裸 new/delete。
* 使用 std::vector 或 std::string 而不是动态分配的C风格数组。
* 异常安全:考虑代码在发生异常时的行为,确保不会泄露资源或破坏数据一致性。通常会提供基本的、强烈的或不抛出的异常安全保证。
* const正确性:广泛使用 const 关键字来标记不应修改的参数、方法和对象,这既是编译时的约束,也是给阅读者的承诺。
* void print(const std::string& message) const;
4. 对性能与控制的关注
这是C++程序员区别于其他语言程序员的一个关键点。
* 对开销的认知:了解拷贝、函数调用、虚函数等操作的成本,并在关键路径上主动优化。
* 引用与移动语义:在C++11及以后,会熟练使用右值引用和移动语义来避免不必要的深拷贝。
* 使用 const T& 传递只读参数,使用 T&& 实现移动构造/赋值。
* 标准库的高效使用:熟悉STL容器和算法的复杂度,并能选择最适合当前场景的组件。
5. 防御性编程与错误处理
人类知道代码会出错,用户会误用。
* 断言:使用 assert 或静态断言 static_assert 来捕获在调试阶段不应发生的逻辑错误。
* 输入验证:不信任外部输入,对函数参数和用户数据进行校验。
* 明确的错误处理:使用返回值、异常或 std::optional/std::expected (C++23) 等方式来明确地报告和处理错误,而不是简单地忽略。
6. 演进与团队协作的痕迹
代码是活的,会随着需求变化和团队成员的更替而演变。
* 版本控制信息:注释中可能包含与版本控制系统(如Git)相关的提交信息或Issue编号。
* 被注释掉的旧代码:有时为了对比或临时测试,会保留一些被注释的代码,并附上注释说明原因。
* “臭味”与妥协:代码中可能存在一些不那么完美的“临时方案”或已知的“技术债”,并伴有注释说明。这反映了项目进度和现实约束的平衡。
示例对比
机器生成/初学者代码:
人类编写的C++代码:
总结来说,人类C++代码的特征是:意图清晰、结构严谨、安全可靠、高效可控,并且充满了为其他人类读者考虑的“人文关怀”。