Google的项目大多使用C++开发。每一个C++程序员也都知道, C++具有很多强大的语言特性,但这种强大不可避免的导致它的复杂,而复杂性会使得代码更容易出现bug.难于阅读和维护。
本指南的目的是通过详细阐述如何进行C+ +编码来规避其复杂性,使得代码在有效使用C+ +语言特性的同时还易于管理。
使代码易于管理的方法之一是增强代码一 致性,让别人可以读懂你的代码是很重要的,保持统-编程风格意味着可以轻松根据“模式匹配”规则推断各种符号的含义。创建通用的、必需的习惯用语和模式可以使代码更加容易理解在某些情况下改变一些编程风格可能会是好的选择 但我们还是应该遵循一致性原则,尽量不这样去做。
本指南的另-一个观点是C+ +特性的臃肿。C++是一门包含大量高级特性的巨型语言, 某些情况下,我们会限制甚至禁止使用某些特性使代码简化,避免可能导致的各种问题,指南中列举了这类特性,并解释说为什么这些特性是被限制使用的。
注意:本指南并非C+ +教程,我们假定读者已经对C+ +非常熟悉。
头文件
通常,每一个.cc文件( C++的源文件)都有一个对应的h文件(头文件),也有一些例外,如单元测试代码和只包含main0的.cc文件。
正确使用头文件可令代码在可读性、文件大小和性能上大为改观。
下面的规则将引导你规避使用头文件时的各种麻烦。
2.头文件依赖
使用前置声明( forward declarations )尽量减少h文件中#include的数量。
当一个头文件被包含的同时也引入了一项新的依赖( dependency ),只要该头文件被修改,代码就要重新编译。如果你的头文件包含了其他头文件,这些头文件的任何改变也将导致那些包含了你的头文件的代码重新编译。因此,我们应该尽量少的包含头文件,尤其是那些包含在其他头文件中的。
使用前置声明可以显著减少需要包含的头文件数量。举例说明:头文件中用到类File ,但不需要访问File的声明,则头文件中只需前置声明class File;无需#include *file/base/ileh“。
在头文件如何做到使用类Foo而无需访问类的定义?1)将数据成员类型声明为Foo *或Foo & ;
2)参数。返回值类型为Foo的函数只是声明(但不定义实现);
3)静态数据成员的类型可以被声明为Foo ,因为静态数据成员的定义在类定义之外。
另一方面,如果你的类是Foo的子类,或者含有类型为Foo的非静态数据成员,则必须为之包含头文件。
有时,使用指针成员( pointer members ,如果是scoped. ptr更好)替代对象成员( object members )的确更有意义。然而,这样的做法会降低代码可读性及执行效率。如果仅仅为了少包含头文件,还是不要这样替代的好。
当然,.cc文件无论如何都需要所使用类的定义部分,自然也就会包含若干头文件。
注:能依赖声明的就不要衣赖定义。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !