设计类的tips,仍是要从实践当中总结,只凭一两个小程序,很难说明问题。仍是本身慢慢在项目中领悟吧~~小程序
这条基本上是常识了。除了内置类型,指针,迭代器(实质也是指针)以及函数对象外,其他对象都应该以pass-by-reference-to-const做为参数(const T &)传递ide
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:赋值运算操做符为何返回的引用?由于那个返回的引用指向的就是对象自己,既然能调用赋值操做,就说明对象是存在,对象在则引用在spa
2.为何加const修饰符?若是不加,下面这种很奇葩,违反常理的写法竟然会被编译器经过设计
Rational a = 2; Rational b = 3; Rational c = 0; a * b = c;
虽然,代码的本意是a*b返回的临时对象,又被赋值为c。但尼玛怎么看,都是2 * 3 = 0。指针