《C++编程规范——101条规则、准则与最佳实践》笔记000

本文是《C++编程规范——101条规则、准则与最佳实践》的读书笔记,强调了编程规范的重要性,如:避免过度规范细节,注重代码结构的缩进,不强制行长度,统一命名规则,注重注释的质量而非形式,以及不推荐使用匈牙利记法和单一入口、单一出口原则。示例中探讨了大括号位置、空格与制表符的使用以及对匈牙利记法的评价。
摘要由CSDN通过智能技术生成

C++编程规范

C++ coding standards

Author
Herb Sutter 《Exceptional C++ Style》 《Exceptional C++》 《More Exceptional C++》
Andrei Alexandrescu 《Modern C++ Design》 Loki

组织和策略问题

如果人们按照程序员编程的方式修建房屋,那么一只啄木鸟就能毁灭整个文明。 ——Gerald Weinberg

第0条 不要拘泥于小节(了解哪些东西不应该标准化)

摘要
只规定需要规定的事情:不要强制施加个人喜好或者过时的做法。
讨论
应该在每个源文件乃至每个项目中都使用一致的格式,因为同一段代码中要在几种编程风格之间换来换去是很不舒服的。
但是无需在多个项目或者整个公司范围内强制实施一致的格式。
不要尝试强制实施过时的规则。
  • 不要规定缩进多少,应该规定要用缩进来体现代码的结构。缩进空格的数量可以遵照个人习惯,但是至少在每个文件中应该保持一致。
  • 不要强制行的具体长度,应该保证代码行的长度有利于阅读。可以遵照个人习惯来决定行长,但是不要过长。研究表明,文字长度不超过10个单词最利于阅读。
  • 不要在命名方面规定过多,应该规定的是使用一致的命名规范。只有两点是必需的:(1)永远不要使用“晦涩的名称”,即以下划线开始或者包含双下划线的名称;(2)总是使用形如——ONLY_UPPERCASE_NAMES的全大写字母表示宏,不要考虑使用常见的词或者缩略词作为宏的名称(包括常见的模板参数,比如T和U;像#define T anything这样的代码是极容易混淆的)。此外,应该使用一致的、有意义的名称,遵循文件的或者模块的规范。(如果无法决定自己的命名规范,可以尝试如下命名规则:类、函数和枚举的名称形如LikeThis,即单词首字母大写;变量名形如likeThis,即第一个单词首字母小写,第二个单词首字母大写;私有成员变量名形如likeThis_;宏名称形如LIKE_THIS。)
  • 不要规定注释风格(除非需要使用工具从特定的体例中提取出文档),应该编写有用的注释。尽可能编写代码而不是写注释。不要在注释中重复写代码语义,这样很容易产生不一致。应该编写的是解释方法和原理的说明性注释。
示例
例1 大括号的位置

//以下代码在可读性方面不存在差别
void using_k_and_r_style() {
    //
}
void putting_each_brace_on_its_own_line()
{
    //
}
void or_putting_each_brace_on_its_own_line_intented()
    {
    //
    }
//不要随意地或者以容易混淆作用域嵌套关系的方式放置大括号,要尽量遵循每个文件中已经使用的体例。
例2 空格与制表符

  • 如果允许使用制表符,那么要确保团队成员维护彼此的代码时,不会影响代码的清晰和可读性。
  • 如果不允许使用制表符,应该允许编译器在读入源文件时将空格转换为制表符,使用户能够在编辑器中使用制表符,但是在将文件写回时,一定要将制表符转换回空格。
例3 匈牙利记法

将变量信息并入变量名的记法,是混用了类型不安全语言(特别是C)中的设施,这在面向对象语言中是可以存在的,但是有害无益,在泛型编程中则根本不可行。
所以,任何C++编程规范都不应该要求使用匈牙利记法,而在规范中选择禁用该法则是合理的。

例4 单入口,单出口(SESE,Single Entry Single Exit)

历史上,有些编程规范曾经要求每个函数都只能有一个出口,也就意味着只能有一个return语句。这种要求对于支持异常和析构函数的语言而言已经过时了,在这样的语言中,函数通常都有多个隐含的出口。取而代之,应该直接提倡更简单的、更短小的函数,这样的函数本身更易于理解,更容易防错。

组织和策略问题 1 第0 不要拘泥于小节(又名:了解哪些东西不应该标准化) 2 第1 在高警告级别干净利落地进行编译 4 第2 使用自动构建系统 7 第3 使用版本控制系统 8 第4 做代码审查 9设计风格 11 第5 一个实体应该只有一个紧凑的职责 12 第6 正确、简单和清晰第一 13 第7 编程中应知道何时和如何考虑可伸缩性 14 第8 不要进行不成熟的优化 16 第9 不要进行不成熟的劣化 18 第10 尽量减少全局和共享数据 19 第11 隐藏信息 20 第12 懂得何时和如何进行并发性编程 21 第13 确保资源为对象所拥有。使用显式的RAII和智能指针 24 编程风格 27 第14 宁要编译时和连接时错误,也不要运行时错误 28 第15 积极使用const 30 第16 避免使用宏 32 第17 避免使用“魔数” 34 第18 尽可能局部地声明变量 35 第19 总是初始化变量 36 第20 避免函数过长,避免嵌套过深 38 第21 避免跨编译单元的初始化依赖 39 第22 尽量减少定义性依赖。避免循环依赖 40 第23 头文件应该自给自足 42 第24 总是编写内部#include保护符,决不要编写外部#include保护符 43 函数与操作符 45 第25 正确地选择通过值、(智能)指针或者引用传递参数 46 第26 保持重载操作符的自然语义 47 第27 优先使用算术操作符和赋值操作符的标准形式 48 第28 优先使用++和--的标准形式。优先调用前缀形式 50 第29 考虑重载以避免隐含类型转换 51 第30 避免重载&&、||或 ,(逗号) 52 第31 不要编写依赖于函数参数求值顺序的代码 54 类的设计与继承 55 第32 弄清所要编写的是哪种类 56 第33 用小类代替巨类 57 第34 用组合代替继承 58 第35 避免从并非要设计成基类的类中继承 60 第36 优先提供抽象接口 62 第37 公用继承即可替换性。继承,不是为了重用,而是为了被重用 64 第38 实施安全的覆盖 66 第39 考虑将虚拟函数声明为非公用的,将公用函数声明为非虚拟的 68
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值