160 likes | 312 Vues
C ++编码规范之 C ++的用法. C ++的用法 . 类型的使用 函数 类的设计和声明 继承 内存分配和释放 初始化和清除 常量 重载. C ++的用法. 操作符 类型转换 友元 模板 表达式和控制流程 宏 异常处理. 类型的使用. 慎用无符号类型 用 typedef 简化程序中的复杂语法 用 enum 取代(一组相关的)常量 尽量用引用代替指针. 函数. 对内置类型参数一般传值 对非内置类型参数应传递引用或指针 若不得不使用参数不确定的函数,采用 <stdarg.h> 提供的方法 若函数返回状态,尝试用枚举做返回类型
E N D
C++的用法 • 类型的使用 • 函数 • 类的设计和声明 • 继承 • 内存分配和释放 • 初始化和清除 • 常量 • 重载
C++的用法 • 操作符 • 类型转换 • 友元 • 模板 • 表达式和控制流程 • 宏 • 异常处理
类型的使用 • 慎用无符号类型 • 用typedef简化程序中的复杂语法 • 用enum取代(一组相关的)常量 • 尽量用引用代替指针
函数 • 对内置类型参数一般传值 • 对非内置类型参数应传递引用或指针 • 若不得不使用参数不确定的函数,采用<stdarg.h>提供的方法 • 若函数返回状态,尝试用枚举做返回类型 • 函数尽量返回引用 • 若必须返回值,不要强行返回引用 • 禁止成员函数返回成员的引用或指针 • 重复使用的代码用函数代替
类的设计和声明 • 保持类的不同接口在实现原则上的一致性 • 保持不同类接口在实现原则上的一致性 • 显式禁止编译器自动生成不需要的函数 • 用嵌套类的方法减少全局命名空间类的数量 • 提高类内聚合度,降低类间的耦合度 • 不要在类定义时提供函数体
继承 • 继承接口和继承实现 (纯虚函数,一般虚函数,非虚函数) • 显式提供继承和访问修饰,显式指出继承的虚函数 • 基类析构函数函数首选是虚函数 • C++分支用法选择,基于值或基于对象类型
内存 • 谁申请谁释放 • 类消亡时保证指针成员所指堆释放 • 当所指内存被释放后,指针应有一个合理的值 • 给字符串结束符申请空间
初始化和清除 • 声明即初始化强于使用前才初始化 • 确保构造函数初始化完全 • 尽量使用初始化列表 • 构造函数未结束,对象就没有构造出来 • 让赋值函数返回当前对象的引用(=的用法
常量和重载 • 类成员可转换成常量形式暴露出来 • 任何变量和成员函数,首选用const修饰 • 避免重载指针和整型类型上
操作符 • 遵守操作符原义 • 确保自定义操作符能与其他混用 • 操作符需要左值,定义为成员函数;否,作为友元函数 • 后缀操作符 ++(int)前缀++(void)
类型转换 • 尽量避免强制类型转换。若需,显式转换 • 使用新型类型转换,并保证选择正确 const_cast,dynamic_cast,static_cast • 自定义类最好提供显式转换函数 asInt() 代替 int() • 限制隐式类型转换的类型数
友元和模板 • 少用友元 • 模板的限制条件要描述清楚 • 模板中应传引用和指针,而非值
表达式和控制流程 • 尝试用范围比较代替精确比较
宏 • 彻底用常量代替(功能类似的)宏 • 彻底用inline函数代替(功能类似)宏函数 • 用{}把函数宏的函数括起来 • 彻底用typedef代替宏定义新类型 • 不要在公共头文件中定义宏
异常处理 • 确保代码在异常出现时正确处理 • 注意模板类型可能会破坏异常处理的一些约定 • 当心析构时发生异常 • 捕捉异常时不用先基类后派生类 • 捕捉异常时用引用