首页 > 编程语言 > 详细

《Effective C++》笔记:Tips18-Tips21

时间:2014-04-19 14:09:51      阅读:534      评论:0      收藏:0      [点我收藏+]

Tips18:让借口容易被正确使用,不易被误用

Tips19:设计class犹如设计type

设计类的tips,还是要从实践当中总结,只凭一两个小程序,很难说明问题。还是自己慢慢在项目中领悟吧~~

Tips20:宁以pass-by-reference-to-const替换pass-by-value

这条基本上是常识了。除了内置类型,指针,迭代器(实质也是指针)以及函数对象外,其余对象都应该以pass-by-reference-to-const作为参数(const T &)传递

Tips21:必须返回对象时,别妄想返回其reference

一、四则运算的重载操作符应该返回const T

class Rational{
public:
Rational(int value) : mValue(value){}
~Rational(void){}
friend const Rational operator* (const Rational& lhs, const Rational& rhs);
private:
int mValue;
};

这里有两点,

1.返回值是通过值传递。四则运算,本来就是创建新的对象,而这项任务只能在函数体内创建,所以该对象是local对象,如果返回引用的话,一旦离开函数体,local对象销毁,返回的引用指向哪?这个问题,只能呵呵了~~。也可能对象是通过new出来的,这样确实可以让对象一直保存,且reference一直可以指向它。但问题就出现在一直上,因为没办法销毁……,指向该对象的指针早挂了,别指望通过引用来销毁该对象。

PS:赋值运算操作符为什么返回的引用?因为那个返回的引用指向的就是对象本身,既然能调用赋值操作,就说明对象是存在,对象在则引用在


2.为什么加const修饰符?如果不加,下面这种很奇葩,违反常理的写法居然会被编译器通过

Rational a = 2;
Rational b = 3;
Rational c = 0;
a * b = c;

虽然,代码的本意是a*b返回的临时对象,又被赋值为c。但尼玛怎么看,都是2 * 3 = 0


本文出自 “若羽☆初见” 博客,请务必保留此出处http://youngcold.blog.51cto.com/6366865/1398328

《Effective C++》笔记:Tips18-Tips21,布布扣,bubuko.com

《Effective C++》笔记:Tips18-Tips21

原文:http://youngcold.blog.51cto.com/6366865/1398328

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!