函数与引用类型返回

时间:2015-01-08 19:06:47

标签: c++ reference

我对

之间的区别感到困惑
int& refReturn(int &ref){ //return type int&
   ref++;
   return ref;
}

int main(){
   int num1 = 1;
   int num2 = refReturn(num1);
}

int refReturn(int &ref){ //return type int
   ref++;
   return ref;
}

int main(){
   int num1 = 1;
   int num2 = refReturn(num1);
}

似乎两者都导致num2没有引用num1。那么为什么人们更喜欢一个呢?

2 个答案:

答案 0 :(得分:1)

返回引用(int&)和非引用(int)之间的主要区别在于非引用返回副本,返回引用是返回现有项

功能:

int refReturn(int &ref){ //return type int
   ref++;
   return ref;
}

将增加变量ref(实际内容将被修改,因为您通过引用传递),然后返回增量值的副本。

功能:

int& refReturn(int &ref){ //return type int
   ref++;
   return ref;
}

将增加变量ref(实际内容将被修改,因为您通过引用传递),然后返回变量以便可以修改它(没有返回副本)。

上述功能允许您执行以下操作:

int main(void)
{
  int a = 6;
  refReturn(a) = 27;
  cout << "Value of a is: " << a << endl;
  return 0;
}

在上面的程序中,refReturn函数会将a递增1并返回对变量的引用。赋值运算符将为引用分配27,即a。因此a的输出应为27。

答案 1 :(得分:0)

我认为两者基本相同。有一种从reference-to-int到int的转换。它就像:

int num1=1;
int &ref=num1;
int num2=static_cast<int>(++ref);

不同的是,在第一种情况下,在main函数中发生了从reference-to-int到int的转换(如果有这样的转换)。而在第二种情况下,转换发生在refReturn函数中。

是的num2不是对num1的引用。 num2是普通变量。如果你想要num2引用num1,那么你需要将num2更改为一个引用变量,如下所示:

int &num2=refReturn(num1);

注意:这适用于第一个refReturn函数。