簡體   English   中英

從函數返回值 - 為什么它起作用?

[英]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

是的, localVarmyFunc結束時超出了范圍。 但是,在此之前,它的值被復制到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.

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