接下来的是more effective c++ 11至20条款:

11.禁止异常信息(exceptions)传递到析构函数外。
析构函数的调用情况可能有两种:(1)对象正常销毁 (2)异常传播过程中的栈展开机制-销毁。
如果在析构函数内抛出异常,它不会被析构函数捕获,它会传播到析构函数的调用端,如果调用端是因为其他异常而被
调用的,那么程序就会死掉。还有可能就是导致后面的语句无法执行,所以不能让异常传播到析构函数之外。

12.理解“抛出一个异常”与“传递一个参数”或“调用一个虚函数”间的差异。
(1)抛出的异常总会被复制(值传递或引用传递),指针不会被复制,trows ;抛出当前异常,throws type; 抛出异常的静态类型。
(2)被抛出的异常不会进行类型转换,但是可以捕获继承父类的子类型异常。
(3)处理异常的顺序为先捕获先处理,所以要把子类异常放在父类异常前面。

13.通过引用(reference)捕获异常。
通过引用捕获异常,可以解决用指针抛出异常时,如果指针为局部对象(抛出的是被销毁的垃圾),
或者抛出指针new 的堆中的对象该不该在之后删除的烦恼。
也可解决以值传递造成的二次复制的效率问题和虚函数调用的多态问题(异常复制是对静态类型的复制)。

14.审慎使用异常规格(exception specifications)。
在给出了异常规格的函数中,如果函数内不经意违反了异常规格中的异常列表,会导致程序的终止。
也可能会导致较高层次的调用者已经准备处理该异常而无法处理。也可以用“以不同类型的异常取代非预期的异常”解决这个问题。

15.了解异常处理的系统开销。
异常的使用成本是挺高的,请将对try语句块和异常规格的使用限制于非用不可的地点,并且在真正异常的情况下才抛出异常。

16.谨记80-20法则
一个程序80%的资源用于20%的代码的身上。80%的内存被大约20%的代码使用,80%的执行时间花在大约20%的代码身上。
当你需要找出问题的瓶颈所在,最好的是找到那关键的20%的代码,可以借助某个程序分析器来分析,知道语句被执行或函数
调用的频繁度也可以给你一些启示。

17.考虑使用lazy evaluation。
这个法则简而言之就是将非必要的大量的复杂的计算在等到真的要使用的时候才去计算获得,可以提高效率。
不过,真的需要无法避免的大量运算的话,那也是要付出相应的代价的呀。

18.分期摊还预期的计算成本。
这个条款与上一个相对应的,这个条款相当于先预分配需要的内存,或预记录频繁使用的数据,用空间来换取时间。

19.了解临时对象的来源。
临时对象并不是局部对象,它不会在你的源码里出现。
临时对象产生有两种可能:(1)当隐式类型转换。 (2)函数返回对象时候。
只有当以值传递或常量引用传递参数时才会发生隐式类型转换,非常量引用对象参数传递不会发生隐式转换。
要注意避免隐式类型转换,做好返回值的优化。

20.协助完成“返回值优化RVO”。
可以通过内联函数进行返回值的优化,这样可以消除返回的局部对象和临时对象。

未完待续~

More Effective C++ (2)的更多相关文章

  1. Effective前端2:优化html标签

    div { float: left; } .keyboard > div + div { margin-left: 8px; } --> div{display:table-cell;ve ...

  2. Effective java笔记(二),所有对象的通用方法

    Object类的所有非final方法(equals.hashCode.toString.clone.finalize)都要遵守通用约定(general contract),否则其它依赖于这些约定的类( ...

  3. 《Effective java》-----读书笔记

    2015年进步很小,看的书也不是很多,感觉自己都要废了,2016是沉淀的一年,在这一年中要不断学习.看书,努力提升自己!预计在2016年要看12本书,主要涉及java基础.Spring研究.java并 ...

  4. 《Effective Java》学习笔记——积累和激励

    从一个实际案例说起 国庆长假前一个礼拜,老大给我分配了这么一个bug,就是打印出来的报表数量为整数的,有的带小数位,有的不带,毫无规律. 根据短短的两个多月的工作经验以及猜测,最终把范围缩小到以下这段 ...

  5. Effective前端5:减少前端代码耦合

    什么是代码耦合?代码耦合的表现是改了一点毛发而牵动了全身,或者是想要改点东西,需要在一堆代码里面找半天.由于前端需要组织js/css/html,耦合的问题可能会更加明显,下面按照耦合的情况分别说明: ...

  6. Effective前端4:尽可能地使用伪元素

    伪元素是一个好东西,但是很多人都没怎么用,因为他们觉得伪元素太诡异了.其实使用伪元素有很多好处,最大的好处是它可以简化页面的html标签,同时用起来也很方便,善于使用伪元素可以让你的页面更加地简洁优雅 ...

  7. Effective前端3:用CSS画一个三角形

    p { text-indent: 2em } .triangle-container p { text-indent: 0 } img { margin: 15px 0 } 三角形的场景很常见,打开一 ...

  8. Effective前端1:能使用html/css解决的问题就不要使用JS

    div{display:table-cell;vertical-align:middle}#crayon-theme-info .content *{float:left}#crayon-theme- ...

  9. Effective Java笔记一 创建和销毁对象

    Effective Java笔记一 创建和销毁对象 第1条 考虑用静态工厂方法代替构造器 第2条 遇到多个构造器参数时要考虑用构建器 第3条 用私有构造器或者枚举类型强化Singleton属性 第4条 ...

  10. effective java 读后感

    think in java  , effective java  这两本书一直都在java的生态圈中经久不衰.本来想着先翻过 think in java 这本大山,但是读到一半就放弃了.过长的篇幅,让 ...

随机推荐

  1. Java中的线程同步机制

    一.首先为什么线程需要同步? 1.多线程安全问题的原因      A:有多线程环境      B:有共享数据      C:有多条语句操作共享数据 2. //未完待续后面会继续更新

  2. [转]clrDateTime to Dynamics AX TransDate

    转自:https://community.dynamics.com/ax/f/33/t/30791.aspx TransDate是一种只有日期,没有时间的类型 utcDateTime=Global:: ...

  3. Docker Centos安装Redis以及问题处理

    之前一篇文章 Redis安装及主从配置 介绍了redis的安装配置,另一篇文件介绍了 Docker Centos安装Openssh .今天将两篇文件结合一下——在Docker Centos环境下搭建r ...

  4. centos7.1-64bit安装qtcreator

    首先,启用 EPEL Repository: yum -y install epel-release 启用 EPEL Repository 後, 可以用 yum 直接安裝qtcreator: yum ...

  5. 在discuz二次开发模板时,diy编辑显示我“抱歉,您没有权限添加此模块

    <div id="diy_vk_portal_slide_top" class="area"><div id="frameCRxR0 ...

  6. cat > 命令也可以创建文档

    今天看<Linux/Unix系统编程手册>,发现用cat > 命令也可以直接创建文本文档: cat > testcatcreate.txttesttest [2]+ Stopp ...

  7. Houdini Krakatoa Render Plugin

    HDK真实个混蛋,都懒得写个解释.凭着函数英文意思猜测.. plugin sample video: 在极其残忍的开发环境,"Particle Voxel Render" 产生了( ...

  8. css常用命名规则

    (一)常用的CSS命名规则 头:header 内容:content/container 尾:footer 导航:nav 侧栏:sidebar 栏目:column 页面外围控制整体布局宽度:wrappe ...

  9. protoful进行序列化

    Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化.它很适合做数据存储或 RPC 数据交换格式.可用于通讯协议.数据存储等领域的语言无关.平台 ...

  10. mediastream2使用指南(转载)

    http://blog.sina.com.cn/s/blog_59d649610100diui.html 定义 Filter: 媒体库中处理数据的组件.一个filter有0到数个输入流和0到数个输出流 ...