《C++编程规范-又101条.pdf》由会员分享,可在线阅读,更多相关《C++编程规范-又101条.pdf(4页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1 C+Coding Standards 101 Rules,Guidelines and Best Practices C+编程规范编程规范 101 条规则、准则最佳实践条规则、准则最佳实践 组织和策略问题组织和策略问题 第0条 不要拘泥于小节(又:了解哪些东西不应该标准化)。第1条 在高警告级别下干净利落地进行编译。第2条 使用自动构建系统。第3条 使用版本控制系统。第4条 在代码审查上投入。设计风格设计风格 第5条 一个实体应该只有一个紧凑的职责。第6条 正确、简单和清晰第一。第7条 编程中应知道何时和如何考虑可伸缩性。第8条 不要进行不成熟的优化。第9条 不要进行不成熟的劣化。第10条
2、 尽量减少全局和共享数据。第11条 隐藏信息。第12条 懂得何时和如何进行并发性编程。第13条 确保资源为对象所拥有。使用显式的 RAII 和智能指针。编程风格编程风格。第14条 宁要编译时和连接时错误,也不允许有运行时错误。第15条 积极地使用 const。第16条 避免使用宏。第17条 避免使用“魔数”。第18条 尽可能局部地声明变量。第19条 总是初始化变量。第20条 避免函数过长,避免嵌套过深。第21条 避免跨编译单元的初始化依赖。第22条 尽量减少定义性依赖。避免循环依赖。第23条 头文件应该自给自足。第24条 总是编写内部#include 保护符,决不要编写外部#include 保
3、护符。函数与操作符函数与操作符 第25条 正确地选择通过值、(智能)指针或者引用传递参数。第26条 保持重载操作符的自然语义。第27条 优先使用算术操作符和赋值操作符的标准形式。第28条 优先使用+和-的标准形式。优先调用前缀形式。2 第29条 考虑重载以避免隐含类型转换。第30条 避免重载&、|或,(逗号)。第31条 不要编写依赖于函数参数求值顺序的代码。类的设计与继承类的设计与继承 第32条 弄清所要编写的是哪种类。第33条 用小类代替巨类。第34条 用组合代替继承。第35条 避免从并非要设计成基类的类中继承。第36条 优先提供抽象接口。第37条 公用继承即可替换性。继承,不是为了重用,而
4、是为了被重用。第38条 实施安全的改写。第39条 考虑将虚拟函数声明为非公用的,将公用函数声明为非虚拟的。第40条 要避免提供隐式转换。第41条 将数据成员设为私有的,无行为的聚集(C 语言形式的 struct)除外。第42条 不要公开内部数据。第43条 明智地使用 Pimpl。第44条 优先编写非成员非友元函数。第45条 总是一起提供 new 和 delete。第46条 如果提供类专门的 new,应该提供所有标准形式(普通、就地和不抛出)。构造、析构与复制构造、析构与复制 第47条 以同样的顺序定义和初始化成员变量。第48条 在构造函数中用初始化代替赋值。第49条 避免在构造函数和析构函数中
5、调用虚拟函数。第50条 将基类析构函数设为公用且虚拟的,或者保护且非虚拟的。第51条 析构函数、释放和交换绝对不能失败。第52条 一致地进行复制和销毁。第53条 显式地启用或者禁止复制。第54条 避免切片。在基类中考虑用克隆代替复制。第55条 使用赋值的标准形式。第56条 只要可行,就提供不会失败的 swap(而且要正确地提供)。命名命名空间与模块空间与模块 第57条 将类型及其非成员函数接口置于同一命名空间中。第58条 应该将类型和函数分别置于不同的命名空间中,除非有意想让它们一起工作。第59条 不要在头文件中或者#include 之前编写命名空间 using。第60条 要避免在不同的模块中
6、分配和释放内存。第61条 不要在头文件中定义具有链接的实体。第62条 不要允许异常跨越模块边界传播。第63条 在模块的接口中使用具有良好可移植性的类型。模板与泛型模板与泛型 第64条 理智地结合静态多态性和动态多态性。3 第65条 有意地进行显式自定义。第66条 不要特化函数模板。第67条 不要无意地编写不通用的代码。错误处理与异常错误处理与异常 第68条 广泛地使用断言记录内部假设和不变式。第69条 建立合理的错误处理策略,并严格遵守。第70条 区别错误与非错误。第71条 设计和编写错误安全代码。第72条 优先使用异常报告错误。第73条 通过值抛出,通过引用捕获。第74条 正确地报告、处理和
7、转换错误。第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 查找
8、算法。第86条 使用正确的 STL 排序算法。第87条 使谓词成为纯函数。第88条 算法和比较器的参数应多用函数对象少用函数。第89条 正确编写函数对象。类型安全类型安全 第90条 避免使用类型分支,多使用多态。第91条 依赖类型,而非其表示方式。第92条 避免使用 reinterpret_cast。第93条 避免对指针使用 static_cast。第94条 避免强制转换 const。第95条 不要使用 C 风格的强制转换。第96条 不要对 POD 进行 memcpy 操作或者 memcmp 操作。第97条 不要使用联合重新解释表示方式。第98条 不要使用可变长参数()。第99条 不要使用失效对象。不要使用不安全函数。第100条 不要多态地处理数组。4 Up主注:以上101条整理自Herb Sutter和Andrei Alexandrescu所撰写,刘基诚翻译,人民邮电出版社出版的一书“C+Coding Standards-101 Rules,Guidelines,and Best Practices”。每一条内容和其条款编号都与原书一致,未做修改。Up主觉得这是本好书但由于对知识产权的尊重无法和大家分享其全部内容,所以就做了最简单的整理后上传。(*)Up主希望以上内容任何人都能够无条件的参阅和学习,所以那它赚钱赚积分什么的还是不要的好。()总之感谢大家的阅读 q(_)p