/*條款21:必須返回物件時,別妄想返回其引用*/
#includeusing namespace std;
class rational
private:
int n, d;
friend const rational&operator*(const rational&lhs, const rational&rhs);
};const rational&operator*(const rational&lhs, const rational&rhs)else
這裡無論 a,b,c,d是什麼 都永遠相等 因為相乘返回同乙個物件
*///正確寫法
return rational(lhs.n*rhs.n, lhs.d*rhs.d);//這裡需要承受返回值借來的構造與析構成本 本函式可以宣告為inline
} int main()
C 箴言 必須返回物件時別返回引用
一旦程式設計師抓住物件傳值的效率隱憂,很多人就會成為狂熱的聖戰分子,誓要 傳值的罪惡,無論它隱藏多深。他們不屈不撓地追求傳引用的純度,但他們全都犯了乙個致命的錯誤 他們開始傳遞並不存在的物件的引用。這可不是什麼好事。考慮乙個代表有理數的類,包含乙個將兩個有理數相乘的函式 class rational...
Item 21 需要返回物件時,不要返回引用
乙個典型的場景如下 class rational friend const rational operator const rational lhs,const rational rhs rational a,b rational c a b 注意operator 返回的是 rational 例項,...
條款28 避免返回handles 指向物件內部成分
reference 指標 迭代器系統都是所謂的handles 號碼牌,用來獲得某個物件 函式返回乙個handle,隨之而來的便是 減低物件封裝性 的風險。它也可能導致 雖呼叫const成員函式卻造成物件狀態被更改的風險。class point struct rectdata class rectan...