Google C++编程规范 1.2

头文件依赖


当前向声明可满足使用的情况下不要使用#include


你包含一个头文件意味引入一个依赖,当头文件发生改变时,你的源代码文件必须重新编译。如果你的头文件包含其他头文件,其他的头文件发生任何一点改变,你源代码文件必须重新编译,因此我们应选择最小依赖,特别是头文件包含其他头文件时。


在你需要包含你自己定义的头文件时使用前向声明,你能减少一大堆头文件。比如说,你的头文件使用File类而不需要访问File类的声明,你只需要在头文件中前向声明class File,而不是使用#include “file/base/file.h”。

怎样才能在头文件中使用class Foo而访问其定义?

    我们可以将Foo类型的成员变量声明为指针Foo*或引用Foo&

    我们可以声明(不是定义)类型Foo为函数的参数和返回值(例外:如果参数Fooconst Foo&有一个noo-explicit,单参构造函数,在这种情况下我们需要Foo的定义以支持自动类型转换。)

    我们可以声明Foo类型的static成员变量。这是因为static成员变量定义在class外部。

   

    在别的情况下,如你定义Foo的子类或拥有一个Foo数据成员,你必须包含Foo的头文件。

    某些情况下使用指针成员变量(或 scoped_ptr )来替代对象成员变量是个更好的选择。但这种情况下使代码可读性下降以及性能下降,所以如果只是降低头文件依赖性应避免使用这种技术。

    当然.cc文件需要classes的定义,通常情况下会包含几个头文件。

注意:

    如果在你的源文件中使用Foo,你应该自己引进Foo的定义,或通过#include和前向声明。不要依赖已经包含了Foo定义的其他头文件。例外:如果Foo已经在myfile.cc中使用,使用#include或前向声明包含myfile.h而不包含myfile.cc



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值