当函数签名具有“&”时,它意味着什么在名字之前?

时间:2011-02-01 22:03:47

标签: c++

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

这个功能是否正确?为什么使用&

新增评论: 谢谢你们。但是在我使用gcc编译它之后,它出现了一个警告,但没有错误。它可以完美运行。还是错的?或只是一个警告问题? -

7 个答案:

答案 0 :(得分:13)

&表示您正在返回参考。在您的情况下,您将返回对int的引用,该引用在函数返回后立即消失;这是一个严重的错误。

答案 1 :(得分:4)

此函数尝试返回对整数的引用。由于整数是函数的局部,因此该定义无效;一旦函数返回,整数将超出范围。

答案 2 :(得分:3)

不,你不能返回对局部变量的引用。

答案 3 :(得分:3)

除了返回对局部变量的引用之外,这是一个邪恶的化身,除非在全局范围内声明sumasumb,否则该函数使用的名称不存在。< / p>

答案 4 :(得分:2)

查找C++ References。将引用(或指针)返回给局部变量是不安全的。函数退出后,局部变量将被销毁,返回的指针将指向undefined内存。

答案 5 :(得分:1)

由于上面的大多数答案已经清除了返回引用的想法,我认为对于它被“解除分配”的想法我会更精确一些。

函数调用将其参数和自动(本地声明的)变量放在内存中的堆栈上。当函数返回时,该内存不会被清零。值保持不变,随着堆栈的增长,该内存将重用于以后的函数。

所以当你使用这个返回的引用时,它可能会有一点点有效,但是随后用于其他函数的随机数据会写入同一个地方,向你显示垃圾数据。

答案 6 :(得分:0)

&安培;表示返回对变量的引用。这可以在原件是一个更大的对象的情况下提供帮助,因为在某些情况下它可以节省必须复制它。

但是,我认为没有理由为int做这个。事实上,由于原始函数在函数返回时被释放,因此在您使用它时会导致问题。