effective c++:必须返回对象时,别妄想返回其reference
2015-10-31 15:49
302 查看
class Rational { public: Rational(int numerator = 0,int denominator = 1) { this -> n = numerator; this -> d = denominator; } private: friend const Rational operator*(const Rational &a,const Rational &b); int n,d; }; const Rational operator*(const Rational& a,const Rational& b) { return Rational(a.n * b.n,a.d * b.d); }//返回一个const避免a * b = c这种错误的表达形式 //由if(a * b == c)少打一个=造成 //这是正确的形式 const Rational& operator*(const Rational& a,const Rational& b) { Rational result(a.n * b.n,a.d * b.d); return result; }//函数结束局部变量将会销毁 const Rational& operator*(const Rational& a,const Rational& b) { Rational* result = new Rational(a.n * b.n,a.d * b.d); return *result; }//存在内存泄露问题w = x * y * z; const Rational& operator*(const Rational& a,const Rational& b) { static Rational result; result = Rational(a.n * b.n,a.d * b.d); return result; }//无法比较(a * b) == (c * d)静态变量导致等式总是成立
虽然返回值构造成本和析构成本有些时候确实很高,但是为了正确,这个代价也不算什么
并且编译器往往会施行优化,有些时候operator*返回值的构造和析构可以被安全的消除。即使不被消除,程序速度往往也会比预期实现的要快
昨天又帮同学装了个系统,虽然装好了,但是浪费了好多时间,我觉得开始进入bios的过程存在盲目的乱试,应该直接上网查如何进入bios选项,然后一次成功。
又想到了那句话,高手喜欢先思考,再做决定,菜鸟才喜欢盲目的瞎尝试
相关文章推荐
- dos中一些常用命令的errorlevel返回值
- VBS中InputBox函数的返回值使用技巧
- ASP中获得Select Count语句返回值的方法
- ajax返回值中有回车换行、空格的解决方法分享
- JQuery异步获取返回值中文乱码的解决方法
- jQuery检测返回值的数据类型
- jquery 打开窗口返回值实现代码
- window.showModalDialog()返回值的学习心得总结
- 基于C++内存分配、函数调用与返回值的深入分析
- Shell中函数返回值超出问题
- c# List find()方法返回值的问题说明(返回结果为对象的指针)
- from 表单提交返回值用post或者是get方法实现
- javascript中声明函数的方法及调用函数的返回值
- javascript 弹出的窗口返回值给父窗口具体实现
- asp.net EXECUTENONQUERY()返回值介绍
- Lua中的协同程序之resume-yield间的数据返回研究
- asp.net中将js的返回值赋给asp.net控件的小例子
- SqlServer获取存储过程返回值的实例
- asp.net弹出窗口 返回值
- asp.net操作javascript:confirm返回值的两种方式