[英]Returning by value from a function - Why does it work?
以下是一個返回整數的簡單函數定義
int myFunc()
{
int localVar = 99;
return localVar;
}
它主要稱為
int main()
{
int y = myFunc();
cout << y << endl;
return 0;
}
這按預期工作。 我想知道為什么? localVar
是一個局部變量,其值在堆棧中分配。 一旦功能結束,它就會超出范圍。 因此, localVar
在調用int y = myFunc();
會超出范圍int y = myFunc();
如何/為什么它仍然能夠返回正確的值?
您的函數返回值的副本 - 這就是“按值返回”的含義。
int y = myFunc();
將值的字節從函數調用使用的臨時位置復制到本地變量。
只有返回局部變量的地址才會失敗。
這里有三件事需要注意:
localVar
myFunc
的返回值 y
是的, localVar
在myFunc
結束時超出了范圍。 但是,在此之前,它的值被復制到myFunc
的返回值(這就是return
語句的作用)。 然后,將此返回值復制到對象y
。 localVar
現在已經消失並不重要 - 你有它的副本。
這正是按價值回歸的結果。 它將return
語句中表達式的結果復制到返回值中。
不得在堆棧上生成localVar
。 如果有可用的寄存器,也可以使用它。
如果它實際上是在堆棧上創建的,則在返回時將值復制到寄存器中。
由於函數的return
類型: int myFunc()
。 它允許您傳回一個int
值。 變量localVar確實超出了main()的范圍,但是localVar沒有在那里使用,y是,當用作y = myFunc()
,它接受返回的int值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.