- 1、本文档共48页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
中文版GoogleC代码风格规范
Google C++ 风格指南 - 中文版
1. 头文件¶
通常每一个 .cc文件都有一个对应的 .h文件. 也有一些常见例外, 如单元测试代码和只包含main() 函数的 .cc文件.
正确使用头文件可令代码在可读性、文件大小和性能上大为改观.
下面的规则将引导你规避使用头文件时的各种陷阱.
1.1. #define 保护¶
Tip
所有头文件都应该使用#define 防止头文件被多重包含, 命名格式当是: PROJECT_PATH_FILE_H_
为保证唯一性, 头文件的命名应该依据所在项目源代码树的全路径. 例如, 项目foo 中的头文件foo/src/bar/baz.h 可按如下方式保护:
#ifndef FOO_BAR_BAZ_H_
#define FOO_BAR_BAZ_H_
…
#endif // FOO_BAR_BAZ_H_
1.2. 头文件依赖¶
Tip
能用前置声明的地方尽量不使用#include.
当一个头文件被包含的同时也引入了新的依赖, 一旦该头文件被修改, 代码就会被重新编译. 如果这个头文件又包含了其他头文件, 这些头文
件的任何改变都将导致所有包含了该头文件的代码被重新编译. 因此, 我们倾向于减少包含头文件, 尤其是在头文件中包含头文件.
使用前置声明可以显著减少需要包含的头文件数量. 举例说明: 如果头文件中用到类File, 但不需要访问File 类的声明, 头文件中只需前
置声明 class File; 而无须#include file/base/file.h.
不允许访问类的定义的前提下, 我们在一个头文件中能对类Foo 做哪些操作?
我们可以将数据成员类型声明为Foo * 或Foo .
我们可以将函数参数/ 返回值的类型声明为Foo (但不能定义实现).
我们可以将静态数据成员的类型声明为Foo, 因为静态数据成员的定义在类定义之外.
反之, 如果你的类是Foo 的子类, 或者含有类型为Foo 的非静态数据成员, 则必须包含Foo 所在的头文件.
有时, 使用指针成员(如果是scoped_ptr 更好) 替代对象成员的确是明智之选. 然而, 这会降低代码可读性及执行效率, 因此如果仅仅为了
少包含头文件,还是不要这么做的好.
当然 .cc文件无论如何都需要所使用类的定义部分, 自然也就会包含若干头文件.
1.3. 内联函数¶
Tip
只有当函数只有10 行甚至更少时才将其定义为内联函数.
定义:
当函数被声明为内联函数之后, 编译器会将其内联展开, 而不是按通常的函数调用机制进行调用.
优点:
当函数体比较小的时候, 内联该函数可以令目标代码更加高效. 对于存取函数以及其它函数体比较短, 性能关键的函数, 鼓励使用
内联.
缺点:
滥用内联将导致程序变慢. 内联可能使目标代码量或增或减, 这取决于内联函数的大小. 内联非常短小的存取函数通常会减少代码
大小, 但内联一个相当大的函数将戏剧性的增加代码大小. 现代处理器由于更好的利用了指令缓存, 小巧的代码往往执行更快。
结论:
一个较为合理的经验准则是, 不要内联超过10 行的函数. 谨慎对待析构函数, 析构函数往往比其表面看起来要更长, 因为有隐含
的成员和基类析构函数被调用!
另一个实用的经验准则: 内联那些包含循环或switch 语句的函数常常是得不偿失(除非在大多数情况下, 这些循环
或 switch 语句从不被执行).
有些函数即使声明为内联的也不一定会被编译器内联, 这点很重要; 比如虚函数和递归函数就不会被正常内联. 通常, 递归函数不
应该声明成内联函数. (YuleFox 注: 递归调用堆栈的展开并不像循环那么简单, 比如递归层数在编译时可能是未知的, 大多数编
译器都不支持内联递归函数). 虚函数内联的主要原因则是想把它的函数体放在类定义内, 为了图个方便, 抑或是当作文档描述其
行为, 比如精短的存取函数.
1.4. -inl.h 文件¶
Tip
复杂的内联函数的定义, 应放在后缀名为 -inl.h 的头文件中.
内联函数的定义必须放在头文件中, 编译器才能在调用点内联展开定义. 然而, 实现代码理论上应该放在 .cc文件中, 我们不希望 .h文件
中有太多实现代码, 除非在可读性和性能上有明显优势.
如果内联函数的定
您可能关注的文档
- 中国电力能源产业发展月度报告(2013年第11期).pdf
- 中国畜产经济学-第4讲20141015.pdf
- 中国的百岁老人研究__微量元素_长寿的重要物质基础.pdf
- 中国的环境污染与经济增长.pdf
- 中国的结构性通货膨胀研究——基于CPI与PPI的相对变化.pdf
- 中国的消费率被低估了多少 朱天.pdf
- 中国的自然地理学.pdf
- 中国石油大学 流体力学 第一次习题课.pdf
- 中国牦牛产业发展思考_阎萍.pdf
- 中国石油勘探开发研究院海外项目英文多媒体.pdf
- 2024年学校党总支巡察整改专题民主生活会个人对照检查材料3.docx
- 2025年民主生活会个人对照检查发言材料(四个带头).docx
- 县委常委班子2025年专题生活会带头严守政治纪律和政治规矩,维护党的团结统一等“四个带头方面”对照检查材料四个带头:.docx
- 巡察整改专题民主生活会个人对照检查材料5.docx
- 2024年度围绕带头增强党性、严守纪律、砥砺作风方面等“四个方面”自我对照(问题、措施)7.docx
- 2025年度民主生活会领导班子对照检查材料(“四个带头”).docx
- 国企党委书记2025年度民主生活会个人对照检查材料(五个带头).docx
- 带头严守政治纪律和政治规矩,维护党的团结统一等(四个方面)存在的问题整改发言提纲.docx
- 党委书记党组书记2025年带头增强党性、严守纪律、砥砺作风方面等“四个带头”个人对照检查发言材料.docx
- 2025年巡视巡察专题民主生活会对照检查材料.docx
文档评论(0)