1. #define 保护函数
(1)命名形式:<PROJECT>_<PATH>_<FILE>_H_性能
例如spa
#ifndef FOO_BAR_BAZ_H_ #define FOO_BAR_BAZ_H_ #endif //FOO_BAR_BAZ_H_
(2)做用:防止头文件被屡次包含。指针
2. 头文件的依赖关系code
(1)包含一个头文件,即引入头文件依赖关系。这个头文件改变时,代码都须要从新编译。递归
(2)使用前置声明来减小自定义头文件包含其余头文件的数量。资源
(3)使用前置声明的状况编译器
a. 声明数据成员 Foo* 或 Foo&;it
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)头文件按其资源目录降序排列。