設計類的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。指針