其他
开发、重构或审查现代 C++17/20 项目时…
适用于现代 C++(C++17/20)的设计、编码、测试、文档和构建,帮助写出安全、高效、可维护的代码。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 49/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
开发、重构或审查现代 C++17/20 通用
解决思路
- 编写干净、现代的 C++ 代码,遵循 C++17/20 标准
- 使用有意义的变量名和函数名
- 遵循单一职责原则
- 优先使用组合而不是继承
- 保持函数短小且职责集中
- 类和结构体使用 PascalCase
- 函数、变量和方法使用 camelCase
- 常量和宏使用 SCREAMING_SNAKE_CASE
- 命名空间使用 snake_case
- 成员变量使用 m_ 前缀或尾随下划线
- 使用 std::unique_ptr 表示独占所有权
- 仅在需要共享所有权时使用 std::shared_ptr
- 使用 std::weak_ptr 打破循环引用
- 避免使用裸拥有指针
- 对所有资源管理使用 RAII
- 将资源包装在具有正确析构函数的类中
- 通过 RAII 确保异常安全
- 使用作用域守卫(scope guards)进行清理操作
- 优先使用栈分配而不是堆分配
- 使用 std::make_unique 和 std::make_shared
- 在应用代码中避免 new 和 delete
- 使用容器代替原始数组
- 使用 structured bindings 解包 tuple
- 使用 std::optional 表示可能不存在的值
- 使用 std::variant 实现类型安全的联合
- 使用 if constexpr 进行编译期条件判断
- 使用 std::string_view 作为非拥有字符串引用
- 使用 concepts 约束模板
- 使用 ranges 编写更简洁的算法
- 使用 std::span 作为非拥有数组视图
- 使用 coroutines 处理异步操作
- 在支持时使用 modules 加快编译
- 使用异常进行错误处理
- 为领域特定错误定义自定义异常类型
- 对不抛异常的函数使用 noexcept
- 按 const 引用捕获异常
- 尽可能提供强异常保证
- 大量使用 const 和 constexpr
- 优先使用 std::move 实现移动语义
- 使用 std::forward 进行完美转发
- 避免不必要的拷贝
- 优化前先做性能分析(profile)
- 对小型且频繁调用的函数使用 inline
- 使用 std::array 代替 C 风格数组
- 使用 std::vector 并进行边界检查
- 优先使用 std::string 而不是 C 风格字符串
- 使用 std::span 作为数组视图
- 避免 C 风格强制转换;使用 static_cast、dynamic_cast 等
- 使用 enum class 代替普通 enum
- 使用 nullptr 代替 NULL
- 启用编译器警告并将警告视为错误
- 使用 std::thread 和 std::jthread 进行线程管理
- 使用 std::mutex 和 std::lock_guard 进行同步
- 对无锁操作使用 std::atomic
- 简单异步操作优先使用 std::async
- 使用条件变量进行线程协调
- 用 Google Test 或 Catch2 编写单元测试
- 使用 Google Mock 等 mocking 框架
- 测试边界情况和错误条件
- 在测试期间使用 sanitizers(ASan、UBSan、TSan)
- 实施持续集成测试
- 使用 Doxygen 风格注释编写文档
- 详尽记录公共 API
- 在文档中包含使用示例
- 随代码变更保持文档最新
- 记录线程安全要求
- 使用 CMake 进行跨平台构建
- 将代码组织为逻辑模块
- 使用包管理器(vcpkg、Conan)管理依赖
- 启用编译器警告和静态分析
- 配置正确的 debug 和 release 构建
适用边界 · 注意事项
- 需要兼容 C++11/14 或更旧标准、或受限于遗留代码库时,不宜强制使用 C++17/20 特性。
- 嵌入式、实时或受限平台禁用异常、RTTI、堆分配或部分标准库组件时,需要按平台约束调整本指南。
- 项目已明确使用其他构建系统、测试框架或依赖管理方式时,不必机械套用 CMake、Google Test/Catch2、vcpkg/Conan 等具体工具建议。