Google C++编码规范学习笔记01
本文使用署名-非商业性使用 2.5授权保护。即,任何人可以自由复制、发行、展览、表演、放映、广播或通过信息网络传播本作品,或创作演绎作品。但必须保留作者(精英王子/jybox),以及指向该页面(http://jybox.net/jyblog)的链接,并不可用于商业用途。 如需摆脱以上限制,请单独联系作者以获得商业授权。
本文是从Google的C++编码规范提炼出来的 第一章,头文件 1.使用#define来放置文件多重多包含 多重包含就是一个cpp文件把同一个h文件反复包含了几次,这样不仅会降低编译效率,而且在某些情况下,还会导致标识符被重复声明的错误 其实知道这个的人很多,几乎所有类库都用了这样的方法: 即在所有头文件的开始和结束添加这样的代码:
- #ifndef FOO_BAR_BAZ_H_
#define FOO_BAR_BAZ_H_ ... #endif // FOO_BAR_BAZ_H_
应该保证这个标识符是唯一的,推荐由项目名、路径、文件名构成 ps..事实上零毫秒没有包括项目名 2.使用前置声明来减少包含头文件的数量 注意,这只适合于头文件,不适合cpp文件 上面的避免多重包含估计大家构知道,但前置声明知道的就不多了 而且有些人认为前置声明用途不大,但事实上,当项目达到一定规模的适合(现在的零毫秒也算),采用和不采用前置声明往往相差一半的编译时间 前置声明就是简单的声明一个类,告诉编译器这个类已经存在了 比如
- #ifndef CLIENTCORE_H
#define CLIENTCORE_H
class QApplication; class QByteArray; class QString; class QTcpSocket; #include <QAbstractSocket> #include <QObject> #include "const.h"
class ClientCore:public QObject { Q_OBJECT public: QTcpSocket *conn; //.....
这里对四个类进行了前置声明,头文件中只用到了他们的指针或者引用,所以完全不必包含他们的定义,只要简单的前置声明,告诉编译器这个类已经存在就可以了。 下面的情况可以使用前置声明: 1.数据成员是指针或者引用 2.类出现在函数形式参数和返回值中(只有函数声明,没有定义) 3.静态数据成员 下面的情况不能使用前置声明(必须包含完整声明): 1.包含了非静态的数据成员 2.包含了函数的实现(内联函数) 3.父类 最后,上面只针对头文件,实现文件(cpp)是无论如何都要包含完整声明的 编码原则:包含最少的头文件!能只包含声明就不要包含定义!
未完待续 |