1. #define 保护
(1)命名形式:<PROJECT>_<PATH>_<FILE>_H_
例如
#ifndef FOO_BAR_BAZ_H_#define FOO_BAR_BAZ_H_#endif //FOO_BAR_BAZ_H_
(2)作用:防止头文件被多次包含。
2. 头文件的依赖关系
(1)包含一个头文件,即引入头文件依赖关系。这个头文件改变时,代码都需要重新编译。
(2)使用前置声明来减少自定义头文件包含其他头文件的数量。
(3)使用前置声明的情况
a. 声明数据成员 Foo* 或 Foo&;
b. 声明静态数据成员 Foo;
c. 声明以 Foo 为参数、返回值的函数(参数 Foo 或者 const Foo& 有一个隐式单参数构造函数,则要引入类定义);
3. 内联函数
(1)利:可产生更高效的目标代码。尽量内联类成员访问、修改函数,其他简短,对性能要求关键的函数。
(2)弊:过量使用会使性能受损。可能使代码量增加。
(3)总结
a. 少于10行;
b. 不含循环或开关指令;
c. 虚函数、递归函数通常不能被内联;
4. 内联头文件
(1)在头文件中定义内联函数,编译器才能将其代码复制到调用处。
(2)头文件一般不含实现代码,除非为了改善可读性或性能。
(3)-inl.h 文件定义复杂的内联函数,避免头文件臃肿,使实现和定义分开。
(4)-inl.h 文件另一用途是定义函数模板,使函数模板定义可读性更好。
5. 函数参数次序
(1)参数次序:输入、输出。
(2)输入,数值或常引用。
(3)输出,非 const 指针。
6. 包含的命名和次序
(1)标准包含次序:C库、C++库、其他库、自定义头文件。
(2)头文件按其资源目录降序排列。