int &sum(int numa, int numb)
{
int sum = 0;
sum = suma+sumb;
return sum;
}
此功能是否正确?为什么它使用&
?当函数签名在名称前有“&”时,意味着什么?
添加评论: 谢谢大家。但在我使用gcc编译之后,它发出了一个警告,但没有错误。它可以完美运行。仍然错误?或只是一个警告问题? -
int &sum(int numa, int numb)
{
int sum = 0;
sum = suma+sumb;
return sum;
}
此功能是否正确?为什么它使用&
?当函数签名在名称前有“&”时,意味着什么?
添加评论: 谢谢大家。但在我使用gcc编译之后,它发出了一个警告,但没有错误。它可以完美运行。仍然错误?或只是一个警告问题? -
&
表示您要返回参考。在你的情况下,你返回一个int
的引用,一旦函数返回就会消失;这是一个严重的错误。
不,您不能返回对局部变量的引用。
该函数试图返回一个整数的引用。由于该整数对于该函数是本地的,因此该定义无效;一旦函数返回,整数将超出范围。
&指示返回对变量的引用。这可以有助于在原件是较大的物件的情况下,因为在某些情况下无需复制原件。
但是,我认为没有理由对int进行此操作。实际上,由于原始函数在函数返回时被释放,因此您在这里使用它会导致问题。
查找C++ References。将引用(或指针)返回给局部变量是不安全的。该函数退出后,局部变量将被销毁,并且您的返回指针将指向内存undefined。
除了向局部变量返回引用,这是一个邪恶的化身,除非在全局范围声明了suma
和sumb
,函数使用的是不存在的名称。
由于大多数上述答案已经清除了返回引用的想法,所以我认为对于“释放”的想法我会更精确。
函数调用将自变量和自动(本地声明的)变量放在内存中的堆栈上。当函数返回时,该内存不会归零。这些值是单独存储的,随着堆栈的增长,该内存将被重新用于后续功能。
所以,当你使用这个返回的引用时,它可能有点有用,但随后为其他函数提供的随机数据将写入相同的位置,向您显示垃圾数据。
这显然是由一些crummudgeonly老C黑客写的。 :) – 2011-02-01 22:07:13
*此函数是否正确*,否,但不是因为签名(`int&`返回类型)。这是不正确的,因为它正在返回一个对UB的临时变量的引用。 – 2011-02-01 22:15:37