int &sum(int numa, int numb)
{
int sum = 0;
sum = suma+sumb;
return sum;
}
这个功能是否正确?为什么使用&
?
新增评论: 谢谢你们。但是在我使用gcc编译它之后,它出现了一个警告,但没有错误。它可以完美运行。还是错的?或只是一个警告问题? -
答案 0 :(得分:13)
&
表示您正在返回参考。在您的情况下,您将返回对int
的引用,该引用在函数返回后立即消失;这是一个严重的错误。
答案 1 :(得分:4)
此函数尝试返回对整数的引用。由于整数是函数的局部,因此该定义无效;一旦函数返回,整数将超出范围。
答案 2 :(得分:3)
不,你不能返回对局部变量的引用。
答案 3 :(得分:3)
除了返回对局部变量的引用之外,这是一个邪恶的化身,除非在全局范围内声明suma
和sumb
,否则该函数使用的名称不存在。< / p>
答案 4 :(得分:2)
查找C++ References。将引用(或指针)返回给局部变量是不安全的。函数退出后,局部变量将被销毁,返回的指针将指向undefined内存。
答案 5 :(得分:1)
由于上面的大多数答案已经清除了返回引用的想法,我认为对于它被“解除分配”的想法我会更精确一些。
函数调用将其参数和自动(本地声明的)变量放在内存中的堆栈上。当函数返回时,该内存不会被清零。值保持不变,随着堆栈的增长,该内存将重用于以后的函数。
所以当你使用这个返回的引用时,它可能会有一点点有效,但是随后用于其他函数的随机数据会写入同一个地方,向你显示垃圾数据。
答案 6 :(得分:0)
&安培;表示返回对变量的引用。这可以在原件是一个更大的对象的情况下提供帮助,因为在某些情况下它可以节省必须复制它。
但是,我认为没有理由为int做这个。事实上,由于原始函数在函数返回时被释放,因此在您使用它时会导致问题。