《Google C++编码规范》读书笔记第一章:头文件

《Google C++编码规范》第一章:头文件

c++源文件在windows系统.cpp,在Linux/Unix下则为.cc,通常一个源文件对应一个.h头文件。正确使用头文件令代码在可读性,性能上都有很大的改观

1.#define的保护

#define是一种防御式声明,防止头文件被多重包含,命名格式:<PROJECT>_<PATH>_<FILENAME>_H_,例如:foo/src/bar/baz.h的声明如下

#ifndef FOO_BAR_BAZ_H_
#define FOO_BAR_BAZ_H_
...
#endif  //FOO_BAR_BAZ_H_

2.头文件依赖

使用前置声明来减少.h头文件中include的数量。
头文件的引入就是一种依赖,一旦该头文件发生改变,代码就要重新编译。
使用前置声明就可以有效解决这个问题。例如在头文件中要用到类file,需要访问file的声明,头文件只需前置声明class file,而并不需要#include "file.h"
在头文件中如何做到使用类file的声明而无需访问类的定义呢?
1. 将成员声明为file*或者file&;
2. 参数,返回值类型为file的函数只是声明(不是定义);
3. 静态数据成员可以声明为file

除了这几种情况外,都必须#include "file.h",尤其:
1. 如果类是file的子类;
2. 含有的是file非静态成员。

源文件则不可避免要包含头文件,能依赖声明就不要依赖定义

3.inline函数

只有当函数小于十行才有可能被定义成内联函数。内联是一种请求,编译器可以拒绝
定义:内联展开的含义是在函数每一个调用的地方都用函数本体替换之(和宏类似)。
1. 优点:函数体比较小时,内联函数将更加高效;
2. 缺点:滥用内联函数将导致程序变慢,当内联函数很小时目标代码量会减少,当内联函数很大时目标代码量会增加。

对于析构函数,要谨慎使用内联。首先虚析构函数一般是无法内联的,因为内联是一种编译器行为,而多态是一种运行期行为。另外,因为析构函数往往比起表面看起来要长的多。对于递归函数和虚函数,一般也无法内联。

4.-inl.h文件

复杂的内联函数的定义,应该放到后缀名为-inl.h的头文件中。-inl.h头文件也需要#define保护。

5.函数的参数顺序

输入参数在前,输出参数在后。输入参数通常为const reference,输出参数通常为non-const reference

6.包含头文件的名称和顺序

顺序通常为:C库,C++库,其它的库,项目内的库。
作用:可增强可读性、避免隐藏依赖
相同目录下按字母排序是一个不错的选择。

主要参考自《Google C++编码规范》中文版

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值