![](/img/trans.png)
[英]What does it mean when an array name is in parentheses with a caret pointer before it?
[英]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
的引用,該函數在函數返回后立即消失; 這是一個嚴重的錯誤。
此函數嘗試返回對整數的引用。 由於整數是函數的局部,因此該定義無效; 函數返回后,整數將超出范圍。
不,你不能返回對局部變量的引用。
除了返回對本地變量的引用之外,這是一個邪惡的化身,除非在全局范圍內聲明suma
和sumb
,否則該函數使用不存在的名稱。
由於上面的大多數答案已經清除了返回引用的想法,我認為對於它被“解除分配”的想法我會更精確一些。
函數調用將其參數和自動(本地聲明的)變量放在內存中的堆棧上。 當函數返回時,該內存不會被清零。 值保持不變,隨着堆棧的增長,該內存將重用於以后的函數。
因此,當您使用此返回的引用時,它可能會有一點點有效,但隨后用於其他函數的隨機數據將寫入同一位置,向您顯示垃圾數據。
&表示返回對變量的引用。 這可以在原件是較大的對象的情況下提供幫助,因為在某些情況下它可以節省必須復制它。
但是,我認為沒有理由為int做這個。 事實上,由於原始函數在函數返回時被釋放,因此在此處使用時會導致問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.