一、头文件
通常,每一个.cc 文件(C++的源文件)都有一个对应的.h 文件(头文件),也有一些例 外,如单元测试代码和只包含 main()的.cc 文件。
正确使用头文件可令代码在可读性、文件大小和性能上大为改观。
下面的规则将引导你规避使用头文件时的各种麻烦。
1. 1. 1. 1.#define #define #define #define的保护 的保护 的保护 的保护
所有头文件都应该使用#define 防止头文件被多重包含(multiple inclusion),命名格式 当是: <PROJECT> _ <PATH> _ <FILE> _H_
为保证唯一性,头文件的命名应基于其所在项目源代码树的全路径。例如,项目 foo 中的头 文件 foo/src/bar/baz.h 按如下方式保护:
#ifndef FOO_BAR_BAZ_H_ #define FOO_BAR_BAZ_H_ ... #endif // FOO_BAR_BAZ_H_
2. 2. 2. 2. 头文件依赖 头文件依赖 头文件依赖 头文件依赖
使用前置声明(forward declarations)尽量减少.h 文件中#include 的数量。
当一个头文件被包含的同时也引入了一项新的依赖(dependency),只要该头文件被修改 , 代码就要重新编译。如果你的头文件包含了其他头文件,这些头文件的任何改变也将导致那 些包含了你的头文件的代码重新编译。因此,我们宁可尽量少包含头文件,尤其是那些包含 在其他头文件中的。
使用前置声明可以显著减少需要包含的头文件数量。举例说明:头文件中用到类 File,但不 需要访问 File 的声明,则头文件中只需前置声明 class File;无需#include "file/base/file.h"。
在头文件如何做到使用类 Foo 而无需访问类的定义?
1) 将数据成员类型声明为 Foo *或 Foo &;
2) 参数、返回值类型为 Foo 的函数只是声明(但不定义实现);
3) 静态数据成员的类型可以被声明为 Foo,因为静态数据成员的定义在类定义之外。
另一方面,如果你的类是 Foo 的子类,或者含有类型为 Foo 的非静态数据成员,则必须为 之包含头文件。
有时,使用指针成员(pointer members,如果是 scoped_ptr 更好)替代对象成员(object members)的确更有意义。然而,这样的做法会降低代码可读性及执行效率。如果仅仅为 了少包含头文件,还是不要这样替代的好。
当然,.cc 文件无论如何都需要所使用类的定义部分,自然也就会包含若干头文件。
译者注:能依赖声明的就不要依赖定义

 

--》遵守吧,也许就是一些小节不注意,公司吹毛求疵的同事或者领导就会认为你能力不行(话说此类公司速闪为秒),努力成长,一定要做别人做不了的,人人都可以做的,都是扯蛋的。但没必要再小事上不遵循规则,也便于代码阅读,项目不是特别急的话,遵守