学习笔记 --《C++编程规范101条规则、准则与最佳实践》
编程规范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保护符,决不要编写外部#inlcude保护符
函数与操作符
- 第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条:不要无意地编写不通用的代码
本文作者:oniisan
本文链接:https://www.cnblogs.com/oniisan/p/cpprules.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步