mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-03-30 21:53:28 +08:00
1.4 KiB
1.4 KiB
paths
| paths | |||||||
|---|---|---|---|---|---|---|---|
|
C++ 模式
本文档基于 common/patterns.md 扩展了 C++ 特定内容。
RAII(资源获取即初始化)
将资源生命周期与对象生命周期绑定:
class FileHandle {
public:
explicit FileHandle(const std::string& path) : file_(std::fopen(path.c_str(), "r")) {}
~FileHandle() { if (file_) std::fclose(file_); }
FileHandle(const FileHandle&) = delete;
FileHandle& operator=(const FileHandle&) = delete;
private:
std::FILE* file_;
};
三五法则/零法则
- 零法则:优先使用不需要自定义析构函数、拷贝/移动构造函数或赋值运算符的类。
- 五法则:如果你定义了析构函数、拷贝构造函数、拷贝赋值运算符、移动构造函数或移动赋值运算符中的任何一个,那么就需要定义全部五个。
值语义
- 按值传递小型/平凡类型。
- 按
const&传递大型类型。 - 按值返回(依赖 RVO/NRVO)。
- 对于接收后即被消耗的参数,使用移动语义。
错误处理
- 使用异常处理异常情况。
- 对于可能不存在的值,使用
std::optional。 - 对于预期的失败,使用
std::expected(C++23)或结果类型。
参考
有关全面的 C++ 模式和反模式,请参阅技能:cpp-coding-standards。