具有引用类型的函数 return

Function with reference type return

我对两者的区别感到困惑

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。那么为什么人们会更喜欢其中之一呢?

return参考 (int&) 和非参考 (int) 之间的主要区别是非参考是 return参考复制,return引用是return引用现有项目

函数:

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

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

函数:

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

会增加变量ref(实际内容会被修改,因为你通过引用传递),然后return变量,这样它就可以被修改(没有副本return编)。

以上函数允许您执行以下操作:

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

在上面的程序中,refReturn 函数将 a 递增 1 和 return 对变量的引用。赋值运算符会将 27 赋值给引用,即 a。因此 a.

的输出应该是 27

我觉得两者基本相同。有一种从引用到整数到整数的转换。就像:

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

不同的是,在第一种情况下,从引用到整数的转换(如果有这样的转换)发生在主函数中。而在第二种情况下,转换发生在 refReturn 函数中。

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

int &num2=refReturn(num1);

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