簡體   English   中英

當函數簽名在名稱前面有“&”時,這意味着什么?

[英]What does it mean when a function signature has “&” before the name?

int &sum(int numa, int numb)
{
    int sum = 0;
    sum = suma+sumb;
    return sum;
}  

這個功能是否正確? 為什么使用&

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

&表示您正在返回參考。 在您的情況下,您將返回對int的引用,該函數在函數返回后立即消失; 這是一個嚴重的錯誤。

此函數嘗試返回對整數的引用。 由於整數是函數的局部,因此該定義無效; 函數返回后,整數將超出范圍。

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

除了返回對本地變量的引用之外,這是一個邪惡的化身,除非在全局范圍內聲明sumasumb ,否則該函數使用不存在的名稱。

查找C ++參考資料 將引用(或指針)返回給局部變量是不安全的。 函數退出后,局部變量將被銷毀,返回的指針將指向未定義的內存。

由於上面的大多數答案已經清除了返回引用的想法,我認為對於它被“解除分配”的想法我會更精確一些。

函數調用將其參數和自動(本地聲明的)變量放在內存中的堆棧上。 當函數返回時,該內存不會被清零。 值保持不變,隨着堆棧的增長,該內存將重用於以后的函數。

因此,當您使用此返回的引用時,它可能會有一點點有效,但隨后用於其他函數的隨機數據將寫入同一位置,向您顯示垃圾數據。

&表示返回對變量的引用。 這可以在原件是較大的對象的情況下提供幫助,因為在某些情況下它可以節省必須復制它。

但是,我認為沒有理由為int做這個。 事實上,由於原始函數在函數返回時被釋放,因此在此處使用時會導致問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM