1. 程式人生 > >C++以const 作為返回值類型的意義

C++以const 作為返回值類型的意義

用戶 tor 程序員 nal 不兼容 對象 per 兩個 但我

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 & 作為返回值,這樣是為了維護以上的理由。(達到同普通運算符的單向值的傳遞效果)

C++以const 作為返回值類型的意義