2011-08-01 27 views
7

這是安全嗎?可以通過const引用返回文字嗎?

const int& f() 
{ 
return 1; 
} 

我試圖做的是返回一些價值爲const &

+2

你爲什麼要這麼做? –

+0

可能重複[是否更有效地返回一個const引用](http://stackoverflow.com/questions/275795/is-it-more-efficient-to-return-a-const-reference) – iammilind

+0

可能重複[C++傳遞Const引用並通過Const參考返回](http://stackoverflow.com/questions/3216948/c-pass-by-const-reference-and-return-by-const-reference) – stijn

回答

8

這並不好。
返回臨時引用並不好,因爲在函數外部訪問它導致未定義行爲

+1

@mkaes:什麼史蒂夫傑索普說。技術上的原因是一個功能結果參考的生命週期延長,實際上是非常昂貴的。該實施必須支持返回對例如函數內部的一個靜態變量,但也必須確保在其他情況下存儲被分配並且在參考消失之後理想地解除分配,優選地以對調用機器代碼透明的方式。我不認爲這在理論上是不可能的。但如果它在技術上是可行的,那麼在實踐中它會非常昂貴...... –

+0

@Steve:同意。我應該仔細閱讀。刪除了錯誤的評論 – mkaes

+0

1是暫時的嗎? 'int x = 1; return x;'會返回一個臨時的,但是'return 1'是不同的,我想。 '1'在哪裏居住?也許所有的文字生活都是一個永久安全的「靜態」空間。例如'const char * foo(){return「我是否暫時?」; }' –

2

不,你返回一個參考給一個臨時變量 - 這是不是安全的。臨時變量在函數返回時將被銷燬。

相關問題