Google C++编程规范 1.2

来源:互联网 发布:扬子石化热电厂优化 编辑:程序博客网 时间:2024/04/28 15:03

头文件依赖


当前向声明可满足使用的情况下不要使用#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



原创粉丝点击