警告:返回对临时 - 奇怪情况的引用(对 Rvalue 的澄清)
Warning: returning reference to temporary - strange case (Clarification for Rvalue)
在这段代码中:
const int & fun(const int &i)
{
return 2*i;
}
int main()
{
const int k=3;
cout<<fun(k)<<endl;
return 0;
}
在这种情况下,fun
的参数不是本地的(没有临时对象来存储引用返回类型(,那么为什么会出现这个警告?+如果我从函数乐趣的返回类型中删除const,它说
"的右值初始化类型为"int&"的非 const 引用无效
但是在删除2* 时(只有我保留为返回的值(,它没有显示任何错误 ->我能想到的是这个2*的东西是将返回转换为 Rvalue,但返回值本身不是Rvalue吗?我哪里出错了?
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;
}
相关文章:
- 函数返回的 rvalue 引用(表达式)是 xvalue - 但没有标识?
- 警告:返回对临时 - 奇怪情况的引用(对 Rvalue 的澄清)
- 为什么不将RVALUE引用定义为RVALUE表达
- 为什么不能使用 rvalue 来初始化 lvalue 引用
- 对匿名RVALUE的引用被损坏
- 每当传递lvalue时,每当通过rvalue传递时,将const引用存储
- RValue 引用在将其绑定(非指针)对象分配给另一个指针后是否会删除该对象?
- 为什么const/nonconst lvalue引用与rvalue参考结合
- rvalue引用lVALUE参考-UB
- 返回const lvalue引用rvalue临时?为什么这项工作
- rvalue 引用和模板参数
- 在Visual Studio 2013中为rvalue引用初始化捕获
- C 禁止将铸件引用到RVALUE参考
- std :: async使用绑定到lambda的rvalue引用
- rvalue引用没有std ::移动
- 对boost asio完成处理程序的rvalue引用
- 将 rvalue/temp 对象传递给需要非成本引用的函数的任何方法
- 悬空 引用 rvalue
- 模板是否应该为不同类型的参数制作非 Rvalue 引用构造函数/赋值
- C++从具有正式参数"rvalue"引用和断言"prvalue"的函数返回"prvalue"?