我对
之间的区别感到困惑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。那么为什么人们更喜欢一个呢?
答案 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函数。