头文件(1)

闲来无事,学习google c++编码规范,英语不好翻译不对的地方请各位大神指正。

头文件

一般来说,每个cpp文件都会有相应的头文件。当然也有例外的情况,比如仅仅包含main方法的cpp文件。正确的使用头文件,可以使你的代码在大小,可读性和性能方面产生巨大的差异。以下的规则将引导你避免使用头文件的误区

 

一、#define 保护

所有的头文件应该有#define 保护以防止头文件被多次包含,标记命名格式为PROJECT>_<PATH>_<FILE>_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而用指针代替数据成员

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值