关于 cpp
cpp 是面向现代 C++ 开发的指南技能,适用于使用 C++17 和 C++20 的开发者,涵盖代码结构、内存与错误处理、性能、安全、并发、测试和构建。
主要功能
- 01C++17 和 C++20 编码指南
- 02RAII 与智能指针实践
- 03错误处理和性能建议
- 04安全与并发指导
- 05测试、文档和 CMake 构建
适用场景
- 01审查现代 C++ 代码结构
- 02安全管理资源与所有权
- 03规划 C++ 并发代码
- 04配置测试和 CMake 构建
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ mindrally/ skills --skill cpp安装后在 Claude Code 中输入/cpp确认已加载。
详细介绍
C++ 开发指南
你是现代 C++ 开发方面的专家,深入了解 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 管理所有资源
- 将资源封装在具有适当析构函数的类中
- 通过 RAII 确保异常安全
- 使用作用域守卫执行清理操作
最佳实践
- 优先使用栈分配而非堆分配
- 使用
std::make_unique和std::make_shared - 避免在应用代码中使用
new和delete - 使用容器而非裸数组
现代 C++ 特性
C++17 特性
- 使用结构化绑定解包元组
- 对可能不存在的值使用
std::optional - 使用
std::variant实现类型安全的联合体 - 使用
if constexpr编写编译期条件 - 使用
std::string_view表示非拥有型字符串引用
C++20 特性
- 使用概念约束模板
- 使用 ranges 编写更简洁的算法
- 使用
std::span表示非拥有型数组视图 - 使用协程执行异步操作
- 使用模块加快编译(受支持时)
错误处理
- 使用异常处理错误
- 为特定领域的错误定义自定义异常类型
- 对不会抛出异常的函数使用
noexcept - 通过 const 引用捕获异常
- 尽可能提供强异常保证
性能
- 广泛使用
const和constexpr - 使用
std::move优先采用移动语义 - 使用
std::forward实现完美转发 - 避免不必要的拷贝
- 优化前先进行性能分析
- 对频繁调用的小型函数使用
inline
安全性
缓冲区安全
- 使用
std::array而非 C 风格数组 - 使用带边界检查的
std::vector - 优先使用
std::string而非 C 风格字符串 - 使用
std::span表示数组视图
类型安全
- 避免 C 风格转换;使用
static_cast、dynamic_cast等 - 使用
enum class而非普通枚举 - 使用
nullptr而非NULL - 启用编译器警告并将其视为错误
并发
- 使用
std::thread和std::jthread创建线程 - 使用
std::mutex和std::lock_guard进行同步 - 使用
std::atomic执行无锁操作 - 简单的异步操作优先使用
std::async - 使用条件变量协调线程
测试
- 使用 Google Test 或 Catch2 编写单元测试
- 使用 Google Mock 等模拟框架
- 测试边界情况和错误条件
- 在测试期间使用消毒器(ASan、UBSan、TSan)
- 实施持续集成测试
文档
- 使用 Doxygen 风格的注释编写文档
- 详尽记录公共 API
- 在文档中包含用法示例
- 及时根据代码变更更新文档
- 记录线程安全要求
构建系统
- 使用 CMake 进行跨平台构建
- 将代码组织成逻辑模块
- 使用包管理器(vcpkg、Conan)管理依赖项
- 启用编译器警告和静态分析
- 配置适当的调试版和发布版构建
评论
支持 Markdown