在此代码中:
const int & fun(const int &i)
{
return 2*i;
}
int main()
{
const int k=3;
cout<<fun(k)<<endl;
return 0;
}
在这种情况下,fun
的参数不是本地的(没有用于存储参考返回类型的临时对象),为什么会出现此警告?
+ 如果我从功能乐趣的返回类型中删除 const ,则说
错误:从'int'类型的右值开始无效初始化'int&amp;'类型的非const引用
但是在删除 2 * (仅返回 i 左侧)时,它不会显示任何错误 - &gt;我能想到的是这个 2 * 的事情是将回报转换为 Rvalue ,但是后来不是返回值 Rvalue 本身?我哪里错了?
答案 0 :(得分:5)
return 2*i;
不会将2
乘以i
,并将该结果存储到i
。它将2
乘以i
并将该结果放入临时值。试图通过引用返回临时值是不行,因为它在该行的末尾被销毁。终身延期不适用于此。
如果您想要修改i
并将其返回,则需要使用operator *=
来修改i
并为您提供一个可以返回的引用
return i *= 2;
但fun
需要int&
代替const int &
。
如果你想返回一个右值,那么你所做的就是返回值,如:
int fun(const int &i)
{
return 2*i;
}
现在您可以捕获它:
int main()
{
const int& ret = fun(3);
cout << ret << endl;
return 0;
}