天天看點

《C++程式設計慣用法——進階程式員常用方法和技巧》——2.8 傳回值為引用

本節書摘來自異步社群出版社《c++程式設計慣用法——進階程式員常用方法和技巧》一書中的第2章,第2.8節,作者: 【美】robert b. murray ,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

函數可以傳回一個引用。傳回引用和傳回指針差不多;被引用的對象在函數傳回時必須仍然存在。尤其是,我們不能傳回一個自動變量(automatic variable)的引用,其原因和我們不能傳回一個指向自動變量的指針一樣:當函數傳回時,所有的自動變量都将會被摧毀,這時我們所能得到的隻是一個空懸(dangling)引用。

例如,由于被指派的對象在指派結束後仍然存在,我們的string類中的指派操作符就可以傳回一個指向*this的引用。然而,用來建立一個新的string對象的連接配接操作的函數則必須傳回一個值:

由于在operator+傳回時,result會被摧毀,是以我們不能傳回一個指向result的引用。我們必須用值的方式傳回它,這将産生result的一個拷貝,函數會把該拷貝傳回給調用函數。

在此我們的程式會有一些性能上的損耗,因為我們必須先建構一份對象的局部拷貝,然後再通過調用複制構造函數把它給傳回給調用函數;不過由于這種用法的普遍性,許多的編譯器都可以把這份額外的拷貝給優化掉[5]。

繼續閱讀