條款21 必須返回物件時,別妄想返回其引用

2021-07-05 02:31:20 字數 469 閱讀 2855

/*條款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...