该系列是开源书C ++最佳实践的中文版本。该书从工具,代码样式,安全性,维护,移植性,多线程,性能和正确性的角度全面介绍了现代C ++项目的最佳实践。本文是该系列的第二部分。
代码样式最重要的是一致性,其次是C ++程序员习惯的阅读样式。
C ++允许任何长度的标识符的名称,因此在命名时无需保持简单。建议使用描述性名称并保持样式一致。
这两个是非常常见的命名规格。优点是可以在需要时对拼写厨师进行调整。
要建立代码样式指南,无论建立哪种代码样式指南,都必须实现指定的指定期望文档。尽管这没有帮助,但对于开源项目而言尤为重要。
许多IDE和编辑器都支持内置的Clang-Format,或者可以通过加载项目轻松安装。
GM C ++命名协议C ++标准库(以及其他著名的C ++库,例如Boost)使用以下指导原则:
差异化的私人对象数据使用前缀命名的私人数据来区分公共数据,代表“成员(成员)”数据。
区分功能参数的最重要的事情是保持代码库的一致性,这是一种帮助维持一致性的方法。
使用前缀命名函数参数可以视为“ the”,但可以表示任何含义。关键是将函数参数与范围范围中的其他变量区分开,并遵循一致的命名策略。
您可以为团队选择任何前缀或后缀。以下是一个例子,并提出了有争议的建议。相关讨论请参阅第11期。
请勿将下一行(_)用作名称的开始
好代码样式示例
构建了源源直接指导,以确保创建的文件存储在与源文件夹分离的输出文件夹中。
使用C ++ 11介绍空气指针,应用来替换或指示空指针。
使用笔记应在使用时使用代码块。
要在调试过程中注释此功能块,您可以执行此操作:
如果使用功能标题注释,将会发生冲突。
切勿在标题文件中使用它,该文件会导致命名空间被强行拉入包含标头文件的所有文件的名称空间,从而导致命名空间污染并可能导致名称冲突。实现文件的名称空间就足够了。
包括保护文件标头文件必须包含一个清晰的包含保护符号,以避免同一文件的同一文件问题,并防止与其他项目的标头文件发生冲突。
此外,您可以考虑使用说明。这是许多编译器的标准标准。内容很短,意图很明确。
代码块必须包括可能导致代码语义错误的粘附。
保持每行代码的长度合理
许多项目和编码标准已经为此制定了软规则,也就是说,每个字符的行都应小于80或100。通常更易于阅读此类代码。另外,您还可以查看所有代码。
使用include ...指示Incluber系统文件的本地文件。
初始化成员变量...使用成员初始化列表。
对于POD类型,初始化列表的性能与手动初始化的性能相同,但是对于其他类型,有明显的性能改进。见下文。
在C ++ 11中,您可以为每个成员初始化冥想(使用或使用)。
使用默认值
这可以确保构造函数“忘记”成员对象的初始化。
在编译过程中,不允许使用大型括号的初始化切断数据长度。
除非有明确的原因,否则优先级初始化。
忘了初始化成员会导致无武装的行为错误,这些错误通常很难找到。
如果成员变量在初始化后不会更改,则将标记。
由于无法分配const成员变量,因此复制分配操作对这样的类可能没有意义。
几乎总是没有理由使用命名空间来声明全局名称空间中的标识符。标准,函数和类应存在于适当的命名空间中,或在名称空间中的类中。全局命名空间可能与其他库的标识符发生冲突(主要是没有名称空间的c折叠)。
对于标准库特征,正确的整数类型标准库通常用于处理与大小相关的内容,并定义了大小的大小。
一般而言,使用可以避免大多数问题。
请确保使用了正确的整数类型,并且与C ++标准库是一致的,否则可能不会在当前使用的平台上发出警告,但是如果您切换到其他平台,则可能会发出警告。
请注意,在非符号上执行某些操作时,可能会导致整数溢出。例如:
在对使用和文件扩展的最终分析中,这是个人喜好的问题,但是。HPP和.CPP已被各种编辑器和工具广泛认可。因此,这是一个实用的选择。特别是,Visual Studio仅自动将.cpp和.cxx识别为C ++文件,而VIM不一定将.cc识别为C到C到C到C++文件。
一个特殊项目(OpenStudio)使用.hpp和.cpp表示用户生成的文件,并使用.hxx和.cxx表示由工具生成的文件。可以很好地识别和通过区分来区分。
请勿与某些标签和空格的编辑器混合使用,默认情况下使用Tab和Space的混合凹痕,这使得不使用相同标签的人难以在设置中读取代码。请配置编辑器确保确保这不会发生。
不要将代码带有副作用()
在调试模式下构建时,可以成功地操作上述代码,但是在构建版本时,编译器将删除该代码,从而导致调试和释放的行为以构建它。原因是它是宏。
不要害怕模板模板可以帮助我们遵守干燥原理。由于宏不符合命名空间,不要使用宏可以与模板一起使用。
操作符号重载运算符的明智使用是支持表达语法。例如,这两个大数字看起来,不是。另一个常见的例子是通常使用两个字符串。
但是,太多或错误的运算符过载很容易编写,无法阅读。重载运算符时,请遵循Stackoverflow文章中描述的三个基本规则。
具体来说,请记住以下几点:
有关定制器的更多技术以实现详细信息,请参阅:C ++操作员超载指南。
避免使用隐藏的转换单参数构造器,可用于自动在编译时自动转换单个参数构造器。例如,这种转换很方便,但通常应该避免使用,因为可能会增加额外的开销。
相反,单个参数构造函数可以标记为必需的调用。
转换运算符类似于单个参数构造器。编译器可以调用转换操作员,还将引入其他开销,也应标记。
考虑零规则规则为零规则,除非构造的类有一些新的所有权表格,否则编译器无法提供的功能(复制构造函数,复制分配运算符,移动构造函数,移动分配运算符,开发功能)。
目的是允许编译器在添加更多成员变量时提供最佳的自动维护版本。
本文介绍了该原则的背景,并解释了几乎所有情况的实施技术:C ++的零规则。
你好,我是你的粉丝。我已经在摩托罗拉完成了研发。现在,我已经在Mavenir完成了技术工作,并且我一直对沟通,网络,后端建筑,Yunyan,DevOps,CICD,CICD,Blockchain,AI和其他技术保持着浓厚的兴趣。我通常喜欢阅读和思考,我相信持续的学习和成长,欢迎一起交流和学习。Wechat公共帐户:DeepNomind
原始:https://juejin.cn/post/7097498575757083655