const rational operator*(const rational& lhs, const rational& rhs);
很多程序員第一眼看到它會納悶:為什么operator*的返回結果是一個const對象?因為如果不是這樣,用戶就可以做下面這樣的壞事:
rational a, b, c;
...
(a * b) = c; // 對a*b的結果賦值
我不知道為什么有些程序員會想到對兩個數的運算結果直接賦值,但我卻知道:如果a,b和c是固定類型,這樣做顯然是不合法的。
一個好的用戶自定義類型的特征是,它會避免那種沒道理的與固定類型不兼容的行為。對我來說,對兩個數的運算結果賦值是非常沒道理的。
聲明operator*的返回值為const可以防止這種情況,所以這樣做才是正確的。
基本上一般的operator=運算符函數都會以const & 作為返回值,這樣是為了維護以上的理由。(達到同普通運算符的單向值的傳遞效果)
