1.常量
1.1使用常量取代宏
#define MAX (20) //不好的例子
const int MAX =20 //好的例子
1.2一组相关的常量应定义为枚举
1.2.1编译前检查变量
1.2.2视情况赋值
1.2.3尽量避免枚举重复,如必须重复用已经定义的枚举来修饰
enum Color{black,blue}
1.3不相关的常量,即使取值不一样,也必须分别定义(尽可能使用const)
2.初始化和类型转换
2.1禁止用memcpy、memset初始化非POD对象
(POD基础数据类型如int char float double)
2.2变量使用时声明并初始化
string name;
name="zhangsan" //错误
string name("zhansgan") //正确
2.3避免构造函数做复杂初始化,或者使用"init"函数,如下情况可以使用
2.3.1需要提供初始化返回信息
2.3.2数据成员可能会抛异常
2.3.3数据成员初始化失败会造成类对象初始化失败,引起不确定状态
2.3.4数据初始化依赖this指针:构造函数没有结束,对象没有构造出来,构造函数不能使用this成员
2.3.5初始化过程需要调用虚函数。在构造函数和析构函数中调用虚函数,会导致未定义异常
2.3.6例子
class CPPRule
{
public:
CPPRule():size_(0),res(null){};
long init(int size)
{
//分配资源给res
}
private:
int size_;
Res res;
}
//正确
CPPRule A;
A.init(100);
2.4初始化列表要求严格按照成员声明顺序初始化他们
2.5明确外部依赖关系的全局与静态对象的初始化顺序,可用单例模式或者吧依赖关系的全局对象放在一个文件中来明确初始化顺序
2.6使用C++风格的类型转换,不要使用C风格的类型转换
2.6.1 A* a = (A*) b;//编译不报错,运行会奔溃 (A:public B)
2.6.2 A* a = dynamic_cast<A*> (b)//明确知道指向哪里
2.7避免使用reinterpret_cast
2.8避免使用const_cast(强制去除const属性)
2.9使用虚函数替换dynamic_cast
3.函数
3.1内联函数
3.1.1内联函数小于10行
3.1.2用内联函数替代函数宏
3.1.3内联函数应该放在头文件,如果在类外面要添加inline
3.1.4内联函数的实现放在独立的文件(放单独的头文件中使用扩展名.inl)
3.2函数参数
3.2.1入参尽量用const引用取代指针,使用const避免空指针也避免编译器检测,const让代码阅读者知道该参数不需要修改
3.2.2消除未使用的函数参数
3.2.3尽量少用缺省参数
3.3函数指针
3.3.1尽可能少用函数指针,因为难以维护和难以理解
4.类
4.1类的设计
4.1.1类职责单一,用小类取代巨类,一个类有10个以上数据成员,类的职责可能过多
4.2隐藏信息(封装时面向对象设计和变成的核心思想)
4.2.1尽量减少全局和共享数据
4.2.2禁止成员函数返回成员写的引用或者指针
4.2.3
华为C++规范简版(未完成)
最新推荐文章于 2023-10-05 11:53:40 发布