【发布时间】:2017-12-28 13:52:46
【问题描述】:
在这段代码中:
const int & fun(const int &i)
{
return 2*i;
}
int main()
{
const int k=3;
cout<<fun(k)<<endl;
return 0;
}
在这种情况下,fun 的参数不是本地的(没有 Temporary 对象来存储 Reference 返回类型)那么为什么会出现这个警告?
+ 如果我从 function fun 的返回类型中删除 const 它会说
错误:从“int”类型的右值初始化“int&”类型的非常量引用无效
但是在删除 2* (只有 i 留下作为返回值)它没有显示任何错误 -> 我能想到的是这个 2 * 事情是将返回值转换为 Rvalue 但返回值不是 Rvalue 本身吗?我哪里错了?
【问题讨论】:
-
2*i导致临时。然后,您返回对该临时文件的引用。轰隆隆! -
请注意,即使您保留
const,使用返回的值也是未定义的。
标签: c++ reference return-value rvalue temporary