不忍之刃 ******************** 头文件< Header Files> The #define Guard 所有的头文件都应该使用#defin e 等来防止头文件重复包含,宏的格式应该为:___H_
#ifndef FOO_BAR_BAZ_H_ #define FOO_BAR_BAZ_H_
#endif // FOO_BAR_BAZ_H_ 头文件依赖 当前面的声明已经满足依赖的时候,不要再使用#in clu de 当你包含一个头文件的时候,你就引进了一种依赖,这种依赖会导致:一旦被包含的头文件发生改变,你的代码将会被重新编译
如果你的头文件还包含了其他的头文件,那么这些头文件的任何改变都会导致包含了你的头文件的代码被重新编译
因此,我们应该最小化包含头文件,特别要注意那些包含了其他头文件的头文件
通过使用前向声明可以显著地减少需要包含的头文件的数量
例如,如果你的头文件想使用File 类而不要进入声明了 File 类的文件,这时你的头文件就可以前向声明 File 类,而替代掉#include "file/base/file
如何能在头文件中使用File 类而不用进入它的定义文件
我们可以声明 Fo o *或者 Fo o &类型的数据成员
我们可以声明但并不定义带参和(或)返回 Fo o 类型值得函数
(一个例外是,如果参数 Fo o 或 const Foo&拥有非显式的单参数构造,那么这种情况下就需要全面的定义以支持自动类型转换)
我们可以定义 Fo o 类型的静态数据成员
这是因为静态数据成员是被定义在类定义体之外的
另一方面,如果你的类是Fo o 的子类或者有Fo o 类型的数据成员,那么你就必须包含Fo o的头文件
这样似乎我们应该使用指针(或者更好的是scoped_ptr,这是一个简单的智能指针,它能够保证