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

xiaoxiao2021-02-28  97

构造函数的隐式和显式调用 在构造函数前面加上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
转载请注明原文地址: https://www.6miu.com/read-32042.html

最新回复(0)