EffectiveC++实现(1)
来源:互联网 发布:单反拍摄技巧 知乎 编辑:程序博客网 时间:2024/05/07 21:22
本文总结子EffectiveC++条款27.
太快定义变量可能造成效率上的拖延---尽可能延后变量定义式的出现。这样做可增加程序的清晰度并改善程序效率。
只要定义了一个带构造析构函数的变量,那么当函数的控制流到达这个变量的定义式时就要承受构造和析构成本。因此,为了更好的提高效率应尽量延迟变量的定义直到需要变量,因为定义变量过早可能会造成定义不使用变量,从而增大开销。
<pre name="code" class="cpp">string EP(const string& Val){ string tmpVal; if(Val.length() < MINLENGTH) { throw logic_error("is too short"); } return tmpVal;}
因此如果string长度满足if判断,则会丢出异常,程序提前退出。但是此时仍然要承受tmpVal带来的构造和析构成本。
上边代码在进行tmpVal定义时并没有给他赋值初值,因此在某些情况下其效率并不高。因为通过default构造函数构造出初始值在通过赋值操作比直接在构造时指定初值效率差。
string encrypt(string& s);string EP(const string& Val){ string tmpVal; tmpVal =Val; encrypt(tmpVal); return tmpVal;}跳过毫无意义的default构造过程:
string encrypt(string& s);string EP(const string& Val){ string tmpVal(Val); encrypt(tmpVal); return tmpVal;}因此延后变量的定义,不仅仅直到使用变量的前一刻为止而应该延后变量定义知道能够给他初值实参为止。
对于循环变量的定义分两种情况讨论:
(1)变量定义在循环外
ClassVal w;for(int i=0;i<n;){ w=取决于i的某个值;}(2)定义于循环内
for(int i=0;i<n;){ ClassVal w;}做法(1),一个构造函数,一个析构函数,n个赋值操作;做法(2)n个构造函数,n个析构函数
如果一个赋值成本低于一组构造+析构成本,做法(1)比较高效。但是(1)w的作用域比(2)大,对程序的可理解性和维护性造成冲击。因此除非(1)比(2)成本低,或者处理的代码效率高度敏感,否则应使用(2)。
0 0
- EffectiveC++实现(1)
- 《EffectiveC++》读书笔记(一)条款1-3
- EffectiveC++,实现(2)static_cast,dynamic_cast,const_static,reinterpret_cast
- Effectivec++读书笔记1
- EffectiveC++ 学习笔记1
- effectiveC++读书笔记(九)
- EffectiveC++学习(一)
- EffectiveC++
- effectiveC++
- EffectiveC++
- EffectiveC++读书笔记(1)条款1、2、3
- 《EffectiveC++》读书笔记(二)条款4-6
- effectiveC++之自己实现copy函数的注意事项
- new,关于effectivec++20页内容来个总结1
- EffectiveC++读书笔记(2)条款4、5、6
- EffectiveC++读书笔记(3)条款7、8、9
- 《EffectiveC++》读书笔记(三)--- 尽量延后变量的定义
- EffectiveC++10
- 【Poj2601】Simple calculations 二分
- Hadoop 2.0--HA功能中ZKFC对NN状态的控制
- linux常用命令之文件系统
- poj 3614(最大流)
- 面试可以能遇到的基础算法
- EffectiveC++实现(1)
- Java并发包解析01
- Linux命令集
- matlab实现loop细分
- 顺时针输出矩阵
- HDU1022火车进站问题
- SQLite使用小记2015.06.03(长期更新中)
- 第一次面试---琥珀天气
- Java模块 -- MyBatis 查询数据库 导出Excel文件