Agent skill · software engineering · affaan-m
cpp-coding-standards
基于C++核心指南(isocpp.github.io)的C++编码标准。在编写、审查或重构C++代码时使用,以强制实施现代、安全和惯用的实践。
Why this skill is useful
Provides specific C++ coding standards and practices that enhance type safety and resource management, which the AI may not reliably generate on its own.
What it needs
About 9k tokens when loaded. Last updated 2026-08-06. 238,342 stars on the source repository.
What this skill does
C++ 编码标准(C++ 核心准则) 源自 C++ 核心准则 的现代 C++(C++17/20/23)综合编码标准。强制执行类型安全、资源安全、不变性和清晰性。 何时使用 编写新的 C++ 代码(类、函数、模板) 审查或重构现有的 C++ 代码 在 C++ 项目中做出架构决策 在 C++ 代码库中强制执行一致的风格 在语言特性之间做出选择(例如,enum 对比 enum class,原始指针对比智能指针) 何时不应使用 非 C++ 项目 无法采用现代 C++ 特性的遗留 C 代码库 特定准则与硬件限制冲突的嵌入式/裸机环境(选择性适配) 贯穿性原则 这些主题在整个准则中反复出现,并构成了基础: 1. 处处使用 RAII (P.8, R.1, E.6, CP.20):将资源生命周期绑定到对象生命周期 2. 默认为不可变性 (P.10, Con.1-5, ES.25):从 const/constexpr 开始;可变性是例外 3. 类型安全 (P.4, I.4, ES.46-49, Enum.3):使用类型系统在编译时防止错误 4. 表达意图 (P.3, F.1, NL.1-2, T.10):名称、类型和概念应传达目的 5. 最小化复杂性 (F.2-3, ES.5, Per.4-5):简单的代码就是正确的代码 6. 值语义优于指针语义 (C.10, R.3-5, F.20, CP.31):优先按值返回和作用域对象 哲学与接口 (P.\, I.\) 关键规则 规则 摘要 ------ --------- P.1 直接在代码中表达想法 P.3 表达意图 P.4 理想情况下,程序应是静态类型安全的 P.5 优先编译时检查而非运行时检查 P.8 不要泄漏任何资源 P.10 优先不可变数据而非可变数据 I.1 使接口明确 I.2 避免非 const 全局变量 I.4 使接口精确且强类型化 I.11 切勿通过原始指针或引用转移所有权 I.23 保持函数参数数量少 应该做 不应该做 函数 (F.\) 关键规则 规则 摘要 ------ --------- F.1 将有意义的操作打包为精心命名的函数 F.2 函数应执行单一逻辑操作 F.3 保持函数简短简单 F.4 如果函数可能在编译时求值,则将其声明为 constexpr F.6 如果你的函数绝不能抛出异常,则将其声明为 noexcept F.8 优先纯函数 F.16 对于 "输入" 参数,按值传递廉价可复制类型,其他类型通过 const& 传递 F.20 对于 "输出" 值,优先返回值而非输出参数 F.21 要返回多个 "输出" 值,优先返回结构体 F.43 切勿返回指向局部对象的指针或引用 参数传递 纯函数和 constexpr 反模式 从函数返回 T&& (F.45) 使用 vaarg / C 风格可变参数 (F.55) 在传递给其他线程的 lambda 中通过引用捕获 (F.53) 返回 const T,这会抑制移动语义 (F.49) 类与类层次结构 (C.\) 关键规则 规则 摘要 ------ --------- C.2 如果存在不变式,使用 class;如果数据成员独立变化,使用 struct C.9 最小化成员的暴露 C.20 如果你能避免定义默认操作,就这么做(零规则) C.21 如果你定义或 =delete 任何拷贝/移动/析构函数,则处理所有(五规则) C.35 基类析构函数:公开虚函数或受保护非虚函数 C.41 构造函数应创建完全初始化的对象 C.46 将单参数构造函数声明为 explicit C.67 多态类应禁止公开拷贝/移动 C.128 虚函数:精确指定 virtual、override 或 final 中的一个 零规则 五规则 类层次结构 反模式 在构造函数/析构函数中调用虚函数 (C.82) 在非平凡类型上使用 memset/memcpy (C.90) 为虚函数和重写函数提供不同的默认参数 (C.140) 将数据成员设为 const 或引用,这会抑制移动/拷贝 (C.12) 资源管理 (R.\) 关键规则 规则 摘要 ------ --------- R.1 使用 RAII 自动管理资源 R.3 原始指针 (T) 是非拥有的 R.5 优先作用域对象;不要不必要地在堆上分配 R.10 避免 malloc()/free() R.11 避免显式调用 new 和 delete R.20 使用 uniqueptr 或 sharedptr 表示所有权 R.21 除非共享所有权,否则优先 uniqueptr 而非 sharedptr R.22 使用 makeshared() 来创建 sharedptr 智能指针使用 RAII 模式 反模式 裸 new/delete (R.11) …
How to use it
Reference it in AdaL, Claude Code, Cursor or any coding agent — nothing to install:
@skills affaan-m/cpp-coding-standards--7c1c7a