2011-02-01 95 views
2
int &sum(int numa, int numb) 
{ 
    int sum = 0; 
    sum = suma+sumb; 
    return sum; 
} 

此功能是否正確?爲什麼它使用&當函數簽名在名稱前有「&」時,意味着什麼?

添加評論: 謝謝大家。但在我使用gcc編譯之後,它發出了一個警告,但沒有錯誤。它可以完美運行。仍然錯誤?或只是一個警告問題? -

+0

這顯然是由一些crummudgeonly老C黑客寫的。 :) – 2011-02-01 22:07:13

+0

*此函數是否正確*,否,但不是因爲簽名(`int&`返回類型)。這是不正確的,因爲它正在返回一個對UB的臨時變量的引用。 – 2011-02-01 22:15:37

回答

13

&表示您要返回參考。在你的情況下,你返回一個int的引用,一旦函數返回就會消失;這是一個嚴重的錯誤。

3

不,您不能返回對局部變量的引用。

4

該函數試圖返回一個整數的引用。由於該整數對於該函數是本地的,因此該定義無效;一旦函數返回,整數將超出範圍。

0

&指示返回對變量的引用。這可以有助於在原件是較大的物件的情況下,因爲在某些情況下無需複製原件。

但是,我認爲沒有理由對int進行此操作。實際上,由於原始函數在函數返回時被釋放,因此您在這裏使用它會導致問題。

2

查找C++ References。將引用(或指針)返回給局部變量是不安全的。該函數退出後,局部變量將被銷燬,並且您的返回指針將指向內存undefined

3

除了向局部變量返回引用,這是一個邪惡的化身,除非在全局範圍聲明瞭sumasumb,函數使用的是不存在的名稱。

1

由於大多數上述答案已經清除了返回引用的想法,所以我認爲對於「釋放」的想法我會更精確。

函數調用將自變量和自動(本地聲明的)變量放在內存中的堆棧上。當函數返回時,該內存不會歸零。這些值是單獨存儲的,隨着堆棧的增長,該內存將被重新用於後續功能。

所以,當你使用這個返回的引用時,它可能有點有用,但隨後爲其他函數提供的隨機數據將寫入相同的位置,向您顯示垃圾數據。

相關問題