2010-10-12 57 views
1

像這樣的fnc會延長返回物體的壽命嗎?如果不是,有沒有辦法做到這一點?延長物體壽命

const int& f() //<<----Here you see, I'm returning by ref to const int 
{ 
    return 1; 
} 

回答

2

不,它不會延長對象的生命週期。

不能延長臨時的壽命(臨時被結合參考創建),但是,你可以簡單地做

int f() { return 1; } 

:-)

乾杯&心連心。 ,

- 阿爾夫

+0

你可以通過將結果賦給一個const引用來擴展它:如果你像const int&cref = f()那樣調用這個函數,那麼1的生命週期將延長到cref的生命週期。 – flownt 2010-10-12 19:07:35

+0

@flownt:對不起,接下來發生的事情是,從正式的POV中爲不確定的值創建新的引用。在實踐中,這將是最初的'int'(它實際上還沒有時間被混淆)。然而,如果你試圖用一個具有析構函數的類型的對象來欺騙你,那麼你可能會遇到一個令人討厭的驚喜...... – 2010-10-12 19:12:11

+0

我不確定標準實際上是否需要它,但是由於RVO,沒有理由刪除過早,因此gcc不會 – flownt 2010-10-18 22:14:45

2

我不認爲這將編譯(一定),但如果你得到類似的東西編譯就會失敗運行具有未定義的行爲。

它會而不是延長任何生命週期,所以你正在返回一個ref不再存在的var/const。

+0

它必須按語言規則編譯。它們並不例外,它是一個函數結果引用的綁定(儘管一個好的編譯器可能會發出警告)。但是,對第二段來說。 :-) – 2010-10-12 19:06:53

+0

@Alf:是的,我誤解了'const'。 – 2010-10-12 19:12:33