记录学习,方便以后查看。

 2014-12-28 看完这本书,但是我做到的又有多少呢?确实有一部分

0 不要拘泥于小节

1 在高警告级别干净利落的进行编译,不放过任何警告

2 使用自动构建系统

3 使用版本控制系统VCS

4 在代码审查上投入,对于人交流

5 一个实体应该只有一个紧凑的职责(一次只解决一个问题)

6 正确、简单和清晰第一

7 编程中应知道何时和如何考虑可伸缩性(线性算法优先)

8 不要进行不成熟的优化

9 不要进行不成熟的劣化

10 尽量减少全局和共享数据

11 隐藏信息(不要公开提供抽象实体的内部信息)

12 懂得何时和如何进行并发性编程(多线程)

13 确保资源为对象所拥有,使用显式的RAII和智能指针

14 宁要编译时和连接时错误,也不要运行时错误

15 积极使用const

16 避免使用宏

17 避免使用“魔数”(3.1415等)

18 尽可能局部的声明变量

19 总是初始化变量

20 避免函数过长,避免嵌套过深

21 避免跨编译单元的初始化

22 尽量减少定义性依赖,避免循环依赖

23 头文件应该自给自足,独立编译每一个头文件

24 总是编写内部#include保护符,绝不要编写外部 #include保护符(条件编译)

25 正确地选择通过值、(智能)指针或者引用传递参数

26 保持重载操作符的自然语义

27 优先使用算术操作符和赋值操作符的标准形式

28 优先使用++和—的标准形式,优先使用前缀形式

29 考虑重载以避免隐含类型转换

30 避免重载&&、||、或,

31 不要编写依赖于函数参数求值顺序的代码

32 弄清所要编写的是哪种类(如值类、基类、策略类、异常类)

33 用小类代替巨类

34 用组合代替继承

35 避免从并非要设计成基类的类中继承

36 优先提供抽象接口(依赖倒置原理Dependency Inversion Principle,DIP)

37 共用继承即可替换性,继承不是为了重用,而是为了被重用

38 实施安全的改写(永远不要修改默认参数)

39 考虑将虚拟函数声明为非共用的,将共用函数声明为非虚拟的(non-virtaual interface,NVI)

40 要避免提供隐式转换,可以提供显示转换(explicit)或命名转换函数

41 将数据成员设为私有的,无行为的聚集(C语言struct)除外

42 不要公开内部数据(避免返回类所管理的内部数据的句柄)

43 明智地使用Pimpl (使私有成员不可访问且不可见)

44 优先编写非成员非友元函数

45 总是一起提供new与delete

46 如果提供类专门的new,应该提供所有标准形式(普通、就地和不抛出)

47 以同样的顺序定义和初始化变量

48 在构造函数中用初始化代替赋值

49 避免在构造函数和析构函数中调用虚拟函数

50 将基类析构函数设为共用且虚拟的,或者保护且非虚拟的

51 析构函数、释放和交换绝对不能失败

52 一致的进行复制和销毁

53 显式地启用或者禁用复制

54 避免切片,在基类中考虑用克隆代替复制

55 使用赋值的标准形式

56 只要可行,就提供不会失败的swap(而且要正确的提供)

57 将类型及其非成员函数接口置于同一命名空间(argument-dependent lookup ,ADL,参数依赖查找)

58 应该将类型和函数分别置于不同的命名空间中,除非有意让他们工作在一起

59 不要在头文件或者#include之前编写命名空间using

60 要避免在不同的模块中分配和释放内存(智能指针shared_ptr)

61 不要在头文件中定义具有链接的实体

62 不要允许异常跨越模块边界传播

63 在模块的接口中使用具有良好的可移植性的类型

64 理智的结合静态多态性和动态多态性

65 有意的进行显示自定义

66 不要特化函数模板

67 不要无意的编写不通用的代码

68 广泛地使用断言记录内部假设和不变式

69 建立合理的错误处理策略,并严格遵守

70 区别错误和非错误

71 设计和编写错误安全码

72 优先使用异常报告错误

73 通过值抛出,通过引用捕获

74 正确地报告、处理和转换错误

75 避免使用异常规范

76 默认使用vector,否则,选择其他合适的容器

77 用vector和string代替数组

78 使用vector和string::c_str与非C++ API交换数据

79 在容器中只存储值和智能指针

80 用push_back代替其他扩展序列的方式

81 多用返回操作,少用单元素操作

82 使用公认的惯用法真正的压缩容量(swap),真正的删除元素(erase_remove)

83 使用带检查的STL实现

84 用算法调用代替手工编写的(lambda表达式)

85 使用正确的STL查找算法(无序find/find_if或count/count_if,有序lower_bound/upper_bound/equal_range/binary_search)

86 使用正确定的STL排序算法(开销从小到大 partition()->stable_partition()->nth_element()->partial_sort()->sort()->stable_sort() )

87 使谓词成为纯函数(谓词就是返回值为 bool 类型的函数对象)

88 算法和比较器的参数多用函数对象少用函数

89 正确编写函数对象 (尽量集成至unary_function或binary_function)

90 避免使用类型分支,多使用多态

91 依赖类型,而非其表达方式

92 避免使用reinterpret_cast

93 避免对指针使用static_cast(可用dynamic_cast替换)

94 避免强制转换const

95 不要使用c风格的强制转换

96 不要对非POD进行memcpy操作或者memcmp操作

97 不要使用联合重新解释表示方式

98 不要使用可变长参数(...)

99 不要使用失效对象,不要使用不安全函数

100 不要多态的处理数组

 2014-12-28 看完这本书,但是我做到的又有多少呢?

C++编程规范(101条准则)的更多相关文章

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

    <C+编程规范 101条规则.准则与最佳实践> 0.不要拘泥于小节(了解哪些东西不应该标准化) * 与组织内现有编码规范一致即可 * 包括但不限于: - 缩进 - 行长度 - 命名规范 - ...

  2. Python 编程规范-----转载

    Python编程规范及性能优化 Ptyhon编程规范 编码 所有的 Python 脚本文件都应在文件头标上 # -*- coding:utf-8 -*- .设置编辑器,默认保存为 utf-8 格式. ...

  3. 中兴软件编程规范C/C++

    Q/ZX 深圳市中兴通讯股份有限公司企业标准 (设计技术标准) Q/ZX 04.302.1–2003      软件编程规范C/C++                               20 ...

  4. (转)C++ 编程规范

    转载地址:http://www.cnblogs.com/len3d/archive/2008/02/01/1061902.html C/C++编码规范 今天人们越来越明白软件设计更多地是一种工程,而不 ...

  5. Java编程规范(一)

    最近在看一本有关Java编程规范的书,书中精炼阐述了使用java语言时应该遵循的一些原则.接下来的一段时间我将在这里总结我的学习内容,也希望这一系列文章能够对有需要的人有所帮助. 不考虑任何编码规范的 ...

  6. FangDD Java编程规范

    我们采用<Oracle/Sun原生的Java编程规范>和<Google Java编程规范> Google Java编程风格指南 January 20, 2014 作者:Haws ...

  7. Python学习手册之 Python 之禅、Python 编程规范和函数参数

    在上一篇文章中,我们介绍了 Python 的正则表达式使用示例,现在我们介绍 Python 之禅. Python 编程规范和函数参数.查看上一篇文章请点击:https://www.cnblogs.co ...

  8. Batsing的网页编程规范(HTML/CSS/JS/PHP)

    特别注意!!!我这里的前端编程规范不苟同于Bootstrap的前端规范. 因为我和它的目的不同,Bootstrap规范是极简主义,甚至有些没有考虑到兼容性的问题. 我的规范是自己从编程实践中总结出来的 ...

  9. 华为C语言编程规范

    DKBA华为技术有限公司内部技术规范DKBA 2826-2011.5C语言编程规范2011年5月9日发布 2011年5月9日实施华为技术有限公司Huawei Technologies Co., Ltd ...

随机推荐

  1. Git命令--保存用户名和密码

    使用git各项操作时,总是会出现输入密码的弹窗,且需要多次输入,很是繁琐,通过git命令可以记住密码,避免多次操作. 一.创建保存密码的文件 1.在home文件夹,一般是 C:\Documents a ...

  2. linux下mysql多实例安装(转)

    转自:http://www.cnblogs.com/xuchenliang/p/6843990.html   1.MySQL多实例介绍 1.1.什么是MySQL多实例 MySQL多实例就是在一台机器上 ...

  3. LEMP (LNMP) Stack-5.4.16 (OpenLogic CentOS 7.2)

    LEMP (LNMP) Stack-5.4.16 (OpenLogic CentOS 7.2) 平台: CentOS 类型: 虚拟机镜像 软件包: mariadb-5.5.47 nginx-1.6.3 ...

  4. char*、string、CString各种字符串之间转换

    参考博客: http://blog.csdn.net/luoweifu/article/details/20242307 http://blog.csdn.net/luoweifu/article/d ...

  5. 还在用SELECT COUNT统计数据库表的行数?Out了

    在ABAP里我们如果想用代码获得一个数据库表里有多少条记录,常规做法是使用SELECT COUNT. 如果您使用的是HANA数据库,现在有一种新的办法可以达到同样的目的.HANA数据库里有一张名为m_ ...

  6. 撸了个 django 数据迁移工具 django-supertube

    撸了个 django 数据迁移工具 django-supertube 支持字段映射和动态字段转化. 欢迎 star,issue https://github.com/FingerLiu/django- ...

  7. 集成Ehcache用来缓存表以后,怎么设置缓存刷新时间

    问答 集成Ehcache用来缓存表以后,怎么设置缓存刷新时间  发布于 217天前  作者 老司机  93 次浏览  复制  上一个帖子  下一个帖子  标签: 无 集成Ehcache用来缓存表以后, ...

  8. iOS中的崩溃类型

    http://blog.csdn.net/womendeaiwoming/article/details/44243571 OS中的崩溃类型 在这里了解一下XCode用来表示各种崩溃类型的术语,补充一 ...

  9. 调试工具DEBUG的使用(8086)

    有关CPU和存储单元的概念在前一节我们已经了解,那么如何观察实际机器内部的情况呢?能不能看到具体的寄存器.标志.存储单元的内容呢?可不可以修改和控制它们呢? DEBUG这个有力工具,就可以深入到机器内 ...

  10. java基础——类加载与反射

    第1章 类加载器 1.1 类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. (1)加载 就是指将class文件读入内存,并为之创 ...