《Effective C++》筆記:Tips18-Tips21

Tips18:讓藉口容易被正確使用,不易被誤用

Tips19:設計class猶如設計type

設計類的tips,仍是要從實踐當中總結,只憑一兩個小程序,很難說明問題。仍是本身慢慢在項目中領悟吧~~小程序

Tips20:寧以pass-by-reference-to-const替換pass-by-value

這條基本上是常識了。除了內置類型,指針,迭代器(實質也是指針)以及函數對象外,其他對象都應該以pass-by-reference-to-const做爲參數(const T &)傳遞ide

Tips21:必須返回對象時,別妄想返回其reference

1、四則運算的重載操做符應該返回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:賦值運算操做符爲何返回的引用?由於那個返回的引用指向的就是對象自己,既然能調用賦值操做,就說明對象是存在,對象在則引用在spa


2.爲何加const修飾符?若是不加,下面這種很奇葩,違反常理的寫法竟然會被編譯器經過設計

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

雖然,代碼的本意是a*b返回的臨時對象,又被賦值爲c。但尼瑪怎麼看,都是2 * 3 = 0指針

相關文章
相關標籤/搜索