天天看點

《Effective C++》條款20甯以pass-by-reference-to-const替換pass-by-value

《Effective C++》

條款20:甯以pass-by-reference-to-const替換pass-by-value

      預設情況下C++以by value方式傳遞對象至函數。除非你另外知道,否則函數參數都是以實際參數的副本為初值,而調用端所獲得的亦是函數傳回值的一個複件。這些複件系由copy構造函數産出,這可能使得pass-by-value成為昂貴的費時的操作。

      通過pass-by-reference-to-const的傳遞方式效率高的多:原因是沒有任何構造函數或析構函數被調用,因為沒有任何新對象被建立。

     而且通過pass-by-reference-to-const方式傳遞,可以避免對象切割(slicing)問題。

注意:如果你有個對象屬于内置類型,pass by value 往往比pass by reference to const的效率高些。是以,一般而言,你可以合理假設“pass by value并不昂貴”的唯一對象就是内置類型和STL的疊代器和函數對象。至于其他任何東西都請遵守本條款的忠告,盡量以pass-by-reference-to-const替換pass-by-value。

總結:

盡量以pass-by-reference-to-const替換pass-by-value。前者通常比較高效,并可避免對象切割問題。

以上規則并不适用于内置類型,以及STL的疊代器和函數對象。對它們而言,pass-by-value往往比較适當。

本文轉自313119992 51CTO部落格,原文連結:http://blog.51cto.com/qiaopeng688/1870391

繼續閱讀