2011-02-01 37 views
2
int &sum(int numa, int numb) 
{ 
    int sum = 0; 
    sum = suma+sumb; 
    return sum; 
} 

此功能是否正确?为什么它使用&当函数签名在名称前有“&”时,意味着什么?

添加评论: 谢谢大家。但在我使用gcc编译之后,它发出了一个警告,但没有错误。它可以完美运行。仍然错误?或只是一个警告问题? -

+0

这显然是由一些crummudgeonly老C黑客写的。 :) – 2011-02-01 22:07:13

+0

*此函数是否正确*,否,但不是因为签名(`int&`返回类型)。这是不正确的,因为它正在返回一个对UB的临时变量的引用。 – 2011-02-01 22:15:37

回答

13

&表示您要返回参考。在你的情况下,你返回一个int的引用,一旦函数返回就会消失;这是一个严重的错误。

3

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

4

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

0

&指示返回对变量的引用。这可以有助于在原件是较大的物件的情况下,因为在某些情况下无需复制原件。

但是,我认为没有理由对int进行此操作。实际上,由于原始函数在函数返回时被释放,因此您在这里使用它会导致问题。

2

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

3

除了向局部变量返回引用,这是一个邪恶的化身,除非在全局范围声明了sumasumb,函数使用的是不存在的名称。

1

由于大多数上述答案已经清除了返回引用的想法,所以我认为对于“释放”的想法我会更精确。

函数调用将自变量和自动(本地声明的)变量放在内存中的堆栈上。当函数返回时,该内存不会归零。这些值是单独存储的,随着堆栈的增长,该内存将被重新用于后续功能。

所以,当你使用这个返回的引用时,它可能有点有用,但随后为其他函数提供的随机数据将写入相同的位置,向您显示垃圾数据。

相关问题