从函数返回值 - 为什么它起作用?

时间:2014-01-23 17:19:02

标签: c++ c function return return-value

以下是一个返回整数

的简单函数定义
int myFunc()
{
    int localVar = 99;
    return localVar;
}

它在main中调用为

int main()
{
    int y = myFunc();
    cout << y << endl;
    return 0;
}

这可以按预期工作。我想知道为什么? localVar是一个局部变量,其值在堆栈中分配。一旦功能结束,它就会超出范围。因此,localVar会超出调用范围int y = myFunc();如何/为什么它仍然能够返回正确的值?

4 个答案:

答案 0 :(得分:6)

您的函数正在返回值的副本 - 这就是“按值返回”的含义。
int y = myFunc();会将值的字节从函数调用使用的临时位置复制到本地变量。

如果你返回局部变量的地址,它只会失败。

答案 1 :(得分:2)

这里有三件事需要注意:

  • 对象localVar
  • myFunc
  • 的返回值
  • 对象y

是的,localVar超出了myFunc末尾的范围。但是,在此之前,它的值被复制到myFunc的返回值(这就是return语句的作用)。然后,将此返回值复制到对象y中。 localVar现在已经消失并不重要 - 你有一份副本。

这正是按价值返回的结果。它将return语句中表达式的结果复制到返回值中。

答案 2 :(得分:0)

不得在堆栈上生成

localVar。如果有可用的寄存器,也可以使用它。

如果它实际上是在堆栈上创建的,那么在返回时无论如何都会将值复制到寄存器中。

答案 3 :(得分:0)

由于您的return类型的功能:int myFunc()。它允许您传回int值。变量localVar确实超出了main()的范围,但是localVar没有在那里使用,y是,当用作y = myFunc()时,它接受返回的int值。