C++ 编程规范

摘自《C++ 编程规范: 101 条规则准则与最佳实践》目录部分

C++ 编程规范: 101 条规则准则与最佳实践

  • 组织和策略问题
    • 第 0 条 不要拘泥于小节
    • 第 1 条 在高告警级别干净利落地进行编译
    • 第 2 条 使用自动构建系统
    • 第 3 条 使用版本控制系统
    • 第 4 条 在代码审查上投入
  • 设计风格
    • 第 5 条 一个实体应该只有一个紧凑的职责
    • 第 6 条 正确、简单和清晰第一
    • 第 7 条 编程中应知道何时和如何考虑可伸缩性
    • 第 8 条 不要进行不成熟的优化
    • 第 9 条 不要进行不成熟的劣化
    • 第 10 条 尽量减少全局和共享数据
    • 第 11 条 隐藏信息
    • 第 12 条 懂得何时和如何进行并发性编程
    • 第 13 条 确保资源为对象所拥有。使用显式的 RAII 和智能指针
  • 编程风格
    • 第 14 条 宁要编译时和链接时错误,也不要运行时错误
    • 第 15 条 积极使用 const
    • 第 16 条 避免使用宏
    • 第 17 条 避免使用 “魔数”
    • 第 18 条 尽可能局部地声明变量
    • 第 19 条 总是初始化变量
    • 第 20 条 避免函数过长,避免嵌套过深
    • 第 21 条 避免跨编译单元的初始化依赖
    • 第 22 条 尽量减少定义性依赖。避免循环依赖
    • 第 23 条 头文件应该自给自足
    • 第 24 条 总是编写内部 #include 保护符,决不要编写外部 #include 保护符
  • 函数与操作符
    • 第 25 条 正确地选择通过值、(智能)指针或者引用传递参数
    • 第 26 条 保持重载操作符的自然语义
    • 第 27 条 优先使用算术操作符和赋值操作符的标准形式
    • 第 28 条 优先使用 ++ 和 – 的标准形式。优先调用前缀形式
    • 第 29 条 考虑重载以避免隐含类型转换
    • 第 30 条 避免重载 && 、|| 、或 , (逗号)
    • 第 31 条 不要编写依赖于函数参数求值顺序的代码
  • 类的设计与继承
    • 第 32 条 弄清所要编写的是哪种类
    • 第 33 条 用小类代替巨类
    • 第 34 条 用组合代替继承
    • 第 35 条 避免从并非要设计成基类的类中继承
    • 第 36 条 优先提供抽象接口
    • 第 37 条 公用继承即可替换性。继承,不是为了重用,而是为了被重用
    • 第 38 条 实施安全的改写
    • 第 39 条 考虑将虚拟函数声明为非公用的,将公用函数声明为非虚拟的
    • 第 40 条 要避免提供隐式转换
    • 第 41 条 将数据成员设为私有的,无行为的聚集(C 语言的 struct )除外
    • 第 42 条 不要公开内部数据
    • 第 43 条 明智地使用 Pimpl
    • 第 44 条 优先编写非成员非友元函数
    • 第 45 条 总是一起提供 new 和 delete
    • 第 46 条 如果提供类专门的 new ,应该提供所有标准形式(普通、就地和不抛出)
  • 构造、析构与复制
    • 第 47 条 以同样的顺序定义和初始化成员变量
    • 第 48 条 在构造函数中用初始化代替赋值
    • 第 49 条 避免在构造函数和析构函数中调用虚拟函数
    • 第 50 条 将基类析构函数设为公用且虚拟的,或者保护且非虚拟的
    • 第 51 条 析构函数、释放和交换绝对不能失败
    • 第 52 条 一致地进行复制和销毁
    • 第 53 条 显式地启用或者禁止复制
    • 第 54 条 避免切片。在基类中考虑用克隆代替复制
    • 第 55 条 使用赋值的标准形式
    • 第 56 条 只要可行,就提供不会失败的 swap (而且要正确的提供)
  • 名字空间与模块
    • 第 57 条 将类型及其非成员函数接口置于同一名字空间中
    • 第 58 条 应该将类型和函数分别置于不同的名字空间中,除非是有意想让它们一起工作
    • 第 59 条 不要在头文件中或者 #include 之前编写名字空间 using
    • 第 60 条 要避免在不同的模块中分配和释放内存
    • 第 61 条 不要在头文件中定义具有链接的实体
    • 第 62 条 不要允许异常跨越模块边界传播
    • 第 63 条 在模块的接口中使用具有良好可移植性的类型
  • 模板与泛型
    • 第 64 条 理智地结合静态多态性和动态多态性
    • 第 65 条 有意地进行显式自定义
    • 第 66 条 不要特化函数模板
    • 第 67 条 不要无意地编写不通用的代码
  • 错误处理与异常
    • 第 68 条 广泛地使用断言记录内部假设和不变式
    • 第 69 条 建立合理的错误处理策略,并严格遵守
    • 第 70 条 区别错误与非错误
    • 第 71 条 设计和编写错误安全代码
    • 第 72 条 优先使用异常报告错误
    • 第 73 条 通过值抛出,通过引用捕获
    • 第 74 条 正确地报告、处理和转换错误
    • 第 75 条 避免使用异常规范
  • STL:容器
    • 第 76 条 默认时使用 vector。否则,选择其他合适的容器
    • 第 77 条 用 vector 和 string 代替数组
    • 第 78 条 使用 vector(和 string::c_str)与非 C++ API 交换数据
    • 第 79 条 在容器中只存储值和智能指针
    • 第 80 条 用 push_back 代替其他扩展序列的方式
    • 第 81 条 多用范围操作,少用单元素操作
    • 第 82 条 使用公认的惯用法真正地压缩容量,真正地删除元素
  • STL:算法
    • 第 83 条 使用带检查的 STL 实现
    • 第 84 条 用算法调用代替手工编写的循环
    • 第 85 条 使用正确的 STL 查找算法
    • 第 86 条 使用正确的 STL 排序算法
    • 第 87 条 使谓词成为纯函数
    • 第 88 条 算法和比较器的参数应多用函数对象少用函数
    • 第 89 条 正确编写函数对象
  • 类型安全
    • 第 90 条 避免使用类型分支,多使用多态
    • 第 91 条 依赖类型,而非其表示方式
    • 第 92 条 避免使用 reinterpret_cast
    • 第 93 条 避免对指针使用 static_cast
    • 第 94 条 避免强制转换 const
    • 第 95 条 不要使用 C 风格的强制转换
    • 第 96 条 不要对非 POD 进行 memory 操作或者 memcmp 操作
    • 第 97 条 不要使用联合重新解释表示方式
    • 第 98 条 不要使用可变长参数(…)
    • 第 99 条 不要使用失效对象。不要使用不安全函数
    • 第 100 条 不要多态地处理数组

参考文档

  1. 《C++ 编程规范: 101 条规则准则与最佳实践》
  2. Herb Sutter
  3. Andrei Alexandrescu
相关推荐
程序员的必经之路! 【限时优惠】 现在下单,还享四重好礼: 1、教学课件免费下载 2、课程案例代码免费下载 3、专属VIP学员群免费答疑 4、下单还送800元编程大礼包 【超实用课程内容】  根据《2019-2020年中国开发者调查报告》显示,超83%的开发者都在使用MySQL数据库。使用量大同时,掌握MySQL早已是运维、DBA的必备技能,甚至部分IT开发岗位也要求对数据库使用和原理有深入的了解和掌握。 学习编程,你可能会犹豫选择 C++ 还是 Java;入门数据科学,你可能会纠结于选择 Python 还是 R;但无论如何, MySQL 都是 IT 从业人员不可或缺的技能!   套餐中一共包含2门MySQL数据库必学的核心课程(共98课时)   课程1:《MySQL数据库从入门到实战应用》   课程2:《高性能MySQL实战课》   【哪些人适合学习这门课程?】  1)平时只接触了语言基础,并未学习任何数据库知识的人;  2)对MySQL掌握程度薄弱的人,课程可以让你更好发挥MySQL最佳性能; 3)想修炼更好的MySQL内功,工作中遇到高并发场景可以游刃有余; 4)被面试官打破沙锅问到底的问题问到怀疑人生的应聘者。 【课程主要讲哪些内容?】 课程一:《MySQL数据库从入门到实战应用》 主要从基础篇,SQL语言篇、MySQL进阶篇三个角度展开讲解,帮助大家更加高效的管理MySQL数据库。 课程二:《高性能MySQL实战课》主要从高可用篇、MySQL8.0新特性篇,性能优化篇,面试篇四个角度展开讲解,帮助大家发挥MySQL的最佳性能的优化方法,掌握如何处理海量业务数据和高并发请求 【你能收获到什么?】  1.基础再提高,针对MySQL核心知识点学透,用对; 2.能力再提高,日常工作中的代码换新貌,不怕问题; 3.面试再加分,巴不得面试官打破沙锅问到底,竞争力MAX。 【课程如何观看?】  1、登录CSDN学院 APP 在我的课程中进行学习; 2、移动端:CSDN 学院APP(注意不是CSDN APP哦)  本课程为录播课,课程永久有效观看时长 【资料开放】 课件、课程案例代码完全开放给你,你可以根据所学知识,自行修改、优化。  下载方式:电脑登录课程观看页面,点击右侧课件,可进行课程资料的打包下载。
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页