Gau*_*rav 1 c++ reference temporary return-value rvalue
在这段代码中:
const int & fun(const int &i)
{
return 2*i;
}
int main()
{
const int k=3;
cout<<fun(k)<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,参数fun不是本地的(没有临时对象存储引用返回类型)那么为什么会出现此警告?
+如果我删除常量从返回类型函数fun,它说
错误:从'int'类型的右值开始,无效初始化'int&'类型的非const引用
但是在删除2*(只剩下我返回的值时)它没有显示任何错误 - >我能想到的是这个2*的东西是将返回转换为Rvalue但是后来不是Rvalue本身的返回值?我哪里错了?
return 2*i;不乘2用i和储存导致成i.它2乘以i并将结果放入临时值.试图通过引用返回临时值是不行,因为它在该行的末尾被销毁.终身延期不适用于此处.
如果你想修改i并返回它,你需要使用operator *=哪个将修改i并给你一个你可以返回的引用
return i *= 2;
Run Code Online (Sandbox Code Playgroud)
但fun需要采取一个int&而不是const int &.
如果你想返回一个右值,那么你所做的就是返回值,如:
int fun(const int &i)
{
return 2*i;
}
Run Code Online (Sandbox Code Playgroud)
现在你可以抓住它:
int main()
{
const int& ret = fun(3);
cout << ret << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)