[CODE]百度代码规范读后总结

构造函数的隐式和显式调用
  • 在构造函数前面加上explicite能够防止类的构造函数被隐式调用
  • 显式调用构造函数的时候,可以防止编译器自动生成默认构造函数和默认拷贝构造函数
  • 有默认语意的类,必须显式指定默认构造函数(如string需要在默认构造函数指定为空串)
  • 只有一个参数的默认构造函数,如果没有申明为显式的,会导致非期望的类型转换,并且难以用bug查到
        example:
         implicit constructor MyClass::MyClass(MyArg arg)
这种函数会带来MyArg到 MyClass的隐式转换,有相当大的风险

默认拷贝函数的禁止
  • 有复制意义的类必须防止发生意外复制,必须指定深拷贝还是浅拷贝,
MyClass::MyClass(const MyClass&)
  • 托管资源的类往往是没有复制意义的,这时候需要关闭默认的复制函数 
#define DISALLOW_COPY_AND_ASSIGN(TypeName) /
  TypeName(const TypeName&);               /
  void operator=(const TypeName&)  
sample:  
class CTest
{
         public:
    CTest();

       virtual ~CTest();

private:  
 DISALLOW_COPY_AND_ASSIGN(CTest);  
};

析构函数
  • 若类定义的虚函数,必须指定虚析构函数
  • 若类定义为可被继承的,应该定义公开的虚析构函数或者保护的析构函数
  • 不能让异常离开析构函数
  • 析构函数只应该销毁对象,不应该执行会抛出异常的复杂操作,避免执行可能失败的操作

class Connection { public:

void close(); // " " " -> " ~Connection() {

if (_connection_state == CONNECTED) {
close(); //

} }

};  

继承的使用
  • 继承必须表示is a 的关系,而不是为了复用方法
  • 子类方法不能覆盖父类的非虚方法
  • 尽量使用公有继承
  • 尽量避免使用公有继承,只能有一个是基类继承,其他尽量是接口继承
  • 访问控制
  • 类不能定义public非静态数据成员,也不能定义protected数据成员
  • 类可以定义public静态数据成员,但必须是const的,否则应该通过静态的setter和getter访问
  • 只有组合类是接口的一部分的时候才能是public的
权限申明
  • 数据成员应该按照public,protected和private的顺序申明
友元
  • 除了容器的迭代器,运算符重载等,尽量避免使用友元
错误码
  • 错误码返回int的时候,非负值表示成功,负值表示失败
  • 任何调用有错误码的函数都必须有错误码检查
  • 命名空间
  • 任何有效代码都需要被namespace封装起来
  • 源文件尽量少使用using(怕与头文件的定义冲突),尽量使用using class
  • 内联函数
  • 在类申明中定义的函数会自动内联
函数/方法重载
  • 重载函数的参数顺序需要谨慎考虑
  • 需要避免整数类型和指针之间的重载,因为NULL只是定义为0的一个宏,当传入NULL的时候会引起错误调用
  • 禁止使用默认参数,因为这是编译期绑定的,
在不考虑返回值的前提下,尽量使用前置自增运算符,可以避免不必要的拷贝
条件表达式
  • 不要在条件表达式中新建变量
sizeof关键字
  • 尽可能用sizeof(关键字)而不是sizeof(类型名)
typedef关键字
  • typedef尽量在类中申明,防止滥用
宏定义
  • 尽量少使用宏定义
  • 不要用宏依赖静态变量
  • 不要使用宏作为左值
  • 使用枚举或者const代替宏做常量定义
静态/全局/变量和函数
  • 尽量少使用全局变量,而是用singleton代替
  • 全局变量之间不要有依赖关系
  • 内部使用的全局函数和变量必须申明为静态的
  • 全局静态变量只在类中生效,其余文件需要引用需要加入extern
常量定义
  • define尽量用const和enum替代
  • 尽量少在头文件中定义类和结构体类型的全局常量
  • 枚举值尽量显式定义
const定义
  • 不修改内部状态的成员方法必须申明为const
  • 返回不可修改的指针或者引用需要申明为const
  • 不被修改的指针/引用需要申明为const

你可能感兴趣的:(C)