C++编程规范笔记前言及目录

买这本书的动力是因为I’m a fan of Andrei,原因更加简单,因为他对模板的操控能力完全超出了我对模板的认知。Loki在我手头上任意一个编译器都无法编译通过,这让我倍加郁闷,无法深入的探索Loki的深层实现。如此天马行空的人规规矩矩写书是什么样子的?我非常期待。
 

组织和策略问题        
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条 总是一起提供newdelete        
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条 用vectorstring代替数组        
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进行memcpy操作或者memcmp操作        
97条 不要使用联合重新解释表示方式        
98条 不要使用可变长参数(...        
99条 不要使用失效对象。不要使用不安全函数        
100条 不要多态地处理数组        

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值