# Cpp Dev

> 现代 C++ (C++17/20) 编码规则和最佳实践，包括 STL、智能指针、RAII 和性能优化

- Skill: `wulnut/cpp-dev` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds add wulnut/cpp-dev`
- Raw SKILL.md: https://api.skillmd.com/api/skills/wulnut/cpp-dev/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: Wulnut (https://skillmd.com/u/wulnut)
- Updated: 2026-09-10
- Page: https://skillmd.com/skills/wulnut/cpp-dev

---


# C++ 开发规范

## 何时使用
当你编写或审查 C++ 代码（`*.cpp`、`*.hpp`、`*.c`、`*.h` 文件）时使用此 skill。

## 代码风格和结构
- 编写简洁、符合习惯的 C++ 代码，提供准确的示例
- 遵循现代 C++ 约定和最佳实践
- 根据需要适当使用面向对象、过程式或函数式编程模式
- 利用 STL 和标准算法进行集合操作
- 使用描述性的变量和方法名称（例如，`isUserSignedIn`，`calculateTotal`）
- 将文件结构化为头文件（`*.hpp`）和实现文件（`*.cpp`），并进行合理的关注点分离

## 命名约定
- 类名使用 PascalCase
- 变量名和方法使用 camelCase
- 常量和宏使用 SCREAMING_SNAKE_CASE
- 成员变量前缀使用下划线或 `m_`（例如，`_userId`，`m_userId`）
- 使用命名空间逻辑地组织代码

## C++ 特性使用
- 优先使用现代 C++ 特性（例如，auto、基于范围的循环、智能指针）
- 使用 `std::unique_ptr` 和 `std::shared_ptr` 进行内存管理
- 优先使用 `std::optional`、`std::variant` 和 `std::any` 作为类型安全的替代方案
- 使用 `constexpr` 和 `const` 优化编译时计算
- 使用 `std::string_view` 进行只读字符串操作，避免不必要的复制

## 语法和格式
- 遵循一致的编码风格，如 Google C++ 风格指南或团队标准
- 控制结构和方法的大括号放在同一行
- 使用清晰一致的注释实践

## 错误处理和验证
- 使用异常进行错误处理（例如，`std::runtime_error`，`std::invalid_argument`）
- 使用 RAII 进行资源管理，避免内存泄漏
- 在函数边界验证输入
- 使用日志库记录错误（例如，spdlog、Boost.Log）

## 性能优化
- 避免不必要的堆分配；尽可能优先使用基于栈的对象
- 使用 `std::move` 启用移动语义并避免拷贝
- 使用 `<algorithm>` 中的算法优化循环
- 使用 Valgrind 或 Perf 等工具分析和优化关键部分

## 关键约定
- 使用智能指针而非原始指针以提高内存安全性
- 避免全局变量；谨慎使用单例模式
- 使用 `enum class` 实现强类型枚举
- 在类中分离接口和实现
- 明智地使用模板和元编程来实现通用解决方案

## 测试
- 使用 Google Test (GTest) 或 Catch2 等框架编写单元测试
- 使用 Google Mock 等库模拟依赖
- 为系统组件实现集成测试

## 安全性
- 使用安全编码实践避免漏洞（例如，缓冲区溢出、悬挂指针）
- 优先使用 `std::array` 或 `std::vector` 而非原始数组
- 避免 C 风格的类型转换；必要时使用 `static_cast`、`dynamic_cast` 或 `reinterpret_cast`
- 在函数和成员变量中强制实施常量正确性

## 文档
- 为类、方法和关键逻辑编写清晰的注释
- 使用 Doxygen 生成 API 文档
- 记录代码的假设、约束和预期行为

遵循官方 ISO C++ 标准和指南，获取现代 C++ 开发的最佳实践。

