DSP

头文件(1)

2019-07-13 14:52发布

闲来无事,学习google c++编码规范,英语不好翻译不对的地方请各位大神指正。 头文件 一般来说,每个cpp文件都会有相应的头文件。当然也有例外的情况,比如仅仅包含main方法的cpp文件。正确的使用头文件,可以使你的代码在大小,可读性和性能方面产生巨大的差异。以下的规则将引导你避免使用头文件的误区   一、#define 保护 所有的头文件应该有#define 保护以防止头文件被多次包含,标记命名格式为PROJECT>___H_。为保证标记唯一性,名称应该根据工程文件目录的全称路径。例如有一个foo工程下的一个头文件foo/src/bar/baz.h,标记可以这么定义 #ifndefFOO_BAR_BAZ_H_ #defineFOO_BAR_BAZ_H_   .... #endif// FOO_BAR_BAZ_H_   二、前置声明      前置声明可以避免不必要的#include包含。 定义前置声明是对于类,方法或者模版的没有相关定义的一种声明。当这些符号只是被客户代码使用时,#include包含其实可以用前置声明替换。   优点: 1、不必要的#include包含导致编译器打开更多的文件和处理更多的输入。 2、头文件一旦有更改,这些包含也会使得代码经常被重新编译。   缺点: 1、前置声明中有模版,typedef声明,默认参数和using 声明时,前置声明很难确定它们的正确格式。 2、对于一段给定的代码,很难决定是用前置声明还是#include包含,尤其是代码中存在隐式类型转换方法时。在极端的情况下,用#include包含替换前置声明会不知不觉的改          变了你的代码的含义。 3、为来自同一个头文件的多个符号进行前置声明比#include包含会显得很冗长 4、对方法和模版前置声明会阻止头文件的拥有者对API进行不兼容的改动。例如扩展参数类型或者添加带默认值的模版参数 5、std::命名空间中的符号进行前置声明通常会引发未定义行为 6、为了使用前置声明而构建代码通常会使代码变得更加慢和复杂。例如用指针成员代替对象成员。 7、前置声明的实际效率并没有得到证明。   决定: 1、当使用头文件中声明的一个方法时,总是用#include包含头文件 2、当使用类模版时,最好使用#include包含头文件 3、当使用的是普通的类,可以使用前置声明,但是要小心前置声明的不足和不正确的情况,如果不确定,那就用#include 4、不要为了避免使用#include而用指针代替数据成员