Google C++编程规范 – 第十九条 -《前置声明》

转自:http://roclinux.cn/?p=3285

本原创文章属于《Linux大棚》博客。

博客地址为http://roclinux.cn

文章作者为roc wu

==

【规范】

对于普通的类,建议使用前置声明,而不是#include。

【什么是前置声明】

在英文中,前置声明称为“forward declaration”,是指“对类、函数或模板进行声明,且不含相关的具体定义”。我们可以使用前置声明来代替那些用于声明的#include语句。

【支持者的声音】

过多的#include会导致编译器打开很多的文件,并处理很多的输入内容。另外,当头文件内容修改时,也会导致更多次的重新编译。

如果我们使用前置声明,可以避免上述问题。

【反对者的声音】

  1. 在使用模板、typedef、默认参数等语法时,我们就比较难确定前置声明的正确形式了 ;
  2. 对于一段代码片段,我们很难决定是使用前置声明还是使用#include,尤其是在有隐式转换操作时。在一些极端情况下,用前置声明代替#include会完全改变代码的原意。
  3. 如果要前置声明过多的内容,会显得很冗余拖沓,不如#include简单。
  4. 对函数和模板的前置声明,会阻碍原作者对函数或模板的改进,比如调整一个参数的类型,给模板的参数增加一个默认值等。
  5. 对名字空间std::中标记的前置声明,经常会产生“未定义”的报错。
  6. 如果特意调整代码以便使用前置声明,往往会使得代码运行变慢,代码逻辑变复杂,比如用指针成员代替对象成员等。
  7. 前置声明对代码效率的收益,目前也没有得到有力的证明。

【结论】

  1. 如果要使用头文件中的某个函数,请使用#include方法引用头文件
  2. 如果要使用头文件中的某个类模板,请使用#include方法引用头文件
  3. 如果要使用某个普通的类,建议使用前置声明。
  4. 不必只是为了避免使用#include,而用指针成员替代对象成员。

谢谢!

时间: 2024-10-07 06:30:00

Google C++编程规范 – 第十九条 -《前置声明》的相关文章

对Google C++编程规范的理解和实践

1. #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_B

一张图总结Google C++编程规范(Google C++ Style Guide)

Google C++ Style Guide是一份不错的C++编码指南,我制作了一张比較全面的说明图,能够在短时间内高速掌握规范的重点内容.只是规范毕竟是人定的,记得活学活用.看图前别忘了阅读以下三条重要建议: 1 保持一致也很重要,假设你在一个文件里新加的代码和原有代码风格相去甚远的话,这就破坏了文件本身的总体美观也影响阅读,所以要尽量避免. 2 一些条目往往有例外,比方以下这些,所以本图不能取代文档,有时间还是把PDF认真阅读一遍吧. 异常在測试框架中确实非常好用 RTTI在某些单元測试中很

Google C++ 编程规范总结

一.头文件 #define 的保护 项目 foo 中的头文件 foo/src/bar/baz.h 按如下方式保护: #ifndef FOO_BAR_BAZ_H_ #define FOO_BAR_BAZ_H_ ... #endif //FOO_BAR_BAZ_H_ #ifdef WINDOWS #define MYTYPE long #else #define MYTYPE float #endif #ifndef WINDOWS #define MYTYPE long #else #define

华为C语言编程规范

DKBA华为技术有限公司内部技术规范DKBA 2826-2011.5C语言编程规范2011年5月9日发布 2011年5月9日实施华为技术有限公司Huawei Technologies Co., Ltd.版权所有 侵权必究All rights reserved密级:confidentiality levelDKBA 2826-2011.52011-06-02 华为机密,未经许可不得扩散 Huawei Confidential 第2页,共61页Page 2 , Total61修订声明Revision

C/C++编程规范——头文件

在选择编程规范时,我首选google,其次是华为与微软,最后根据自身的一些实际情况进行调整.以下内容摘自google的c/c++编程规范.--------------------------通常,每一个.cc 文件(C++的源文件)都有一个对应的.h 文件(头文件),也有一些例外,如单元测试代码和只包含 main()的.cc 文件.正确使用头文件可令代码在可读性.文件大小和性能上大为改观.下面的规则将引导你规避使用头文件时的各种麻烦. 1. #define 的保护所有头文件都应该使用#defin

google C++编程风格指南之头文件的包含顺序

google C++编程风格对头文件的包含顺序作出如下指示: (1)为了加强可读性和避免隐含依赖,应使用下面的顺序:C标准库.C++标准库.其它库的头文件.你自己工程的头文件.不过这里最先包含的是首选的头文件,即例如a.cpp文件中应该优先包含a.h.首选的头文件是为了减少隐藏依赖,同时确保头文件和实现文件是匹配的.具体的例子是:假如你有一个cc文件(linux平台的cpp文件后缀为cc)是google-awesome-project/src/foo/internal/fooserver.cc,

Google Java编程风格指南(转)

目录 前言 源文件基础 源文件结构 格式 命名约定 编程实践 Javadoc 后记 前言 这份文档是Google Java编程风格规范的完整定义.当且仅当一个Java源文件符合此文档中的规则, 我们才认为它符合Google的Java编程风格. 与其它的编程风格指南一样,这里所讨论的不仅仅是编码格式美不美观的问题, 同时也讨论一些约定及编码标准.然而,这份文档主要侧重于我们所普遍遵循的规则, 对于那些不是明确强制要求的,我们尽量避免提供意见. 1.1 术语说明 在本文档中,除非另有说明: 术语cl

Windows客户端C/C++编程规范“建议”——文件

7 文件 7.1 正确使用#include 等级:[推荐] 说明:#include <>和#include ""导致编译器在搜索文件时,搜索的路径顺序不同.所以需要正确使用#include,以避免包含错了头文件. 语法形式 操作 带引号的形式 预处理器按以下顺序搜索包含文件: 在包含 #include 语句的文件所在的同一目录中. 在当前打开的包含文件的目录中,采用与打开它们的顺序相反的顺序. 搜索从父包含文件的目录中开始进行,然后继续向上到任何祖父包含文件的目录. 跟随每

我的编程之路(十九) 开发中一些细节与启发

1.js的命名空间           如果写后台代码,分层是潜意识中的基本常识,但是一到了前台,却没了这种意识,归根结底还是js用的不多,也一直没有在意js的地位,直到现在富客户端的趋势与要求,使得很多代码都要在前台用js或其框架完成,所以对于js代码的管理就要像后台java代码一样有其规范了,而命名空间就是package,也是为了管理不同层次的代码. 2.闭包          闭包就是能够读取其他函数内部变量的函数.它的最大用处有两个,一个是可以读取函数内部的变量,另一个就是让这些变量的值