警告:返回对临时的引用 - 奇怪的情况(右值的澄清)
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
的参数不是本地的(没有 Temporary 对象用于存储 Reference return type) 那为什么会出现这个警告呢?
+ 如果我从 function fun 的 return 类型中删除 const 它说
error: invalid initialization of non-const reference of type ‘int&’ from an rvalue of type ‘int’
但是在删除 2* 时(只有 i 被 returned 保留为值)它不显示任何错误 -> 我能想到的是 2* 将 return 转换为 Rvalue 但 return 值 Rvalue 本身?我哪里错了?
return 2*i;
不会将 2
乘以 i
并将结果存储到 i
。它将 2
乘以 i
并将该结果放入临时文件中。尝试 return 临时引用是不行的,因为它在该行的末尾被销毁了。寿命延长不适用于此处。
如果你想修改 i
和 return 它你需要使用 operator *=
这将修改 i
并给你一个参考,你可以 return喜欢
return i *= 2;
但是 fun
需要 int&
而不是 const int &
。
如果你想 return 一个右值,那么你所做的就是 return 值,例如:
int fun(const int &i)
{
return 2*i;
}
现在您可以像这样捕捉它:
int main()
{
const int& ret = fun(3);
cout << ret << endl;
return 0;
}
在此代码中:
const int & fun(const int &i)
{
return 2*i;
}
int main()
{
const int k=3;
cout<<fun(k)<<endl;
return 0;
}
在这种情况下,fun
的参数不是本地的(没有 Temporary 对象用于存储 Reference return type) 那为什么会出现这个警告呢?
+ 如果我从 function fun 的 return 类型中删除 const 它说
error: invalid initialization of non-const reference of type ‘int&’ from an rvalue of type ‘int’
但是在删除 2* 时(只有 i 被 returned 保留为值)它不显示任何错误 -> 我能想到的是 2* 将 return 转换为 Rvalue 但 return 值 Rvalue 本身?我哪里错了?
return 2*i;
不会将 2
乘以 i
并将结果存储到 i
。它将 2
乘以 i
并将该结果放入临时文件中。尝试 return 临时引用是不行的,因为它在该行的末尾被销毁了。寿命延长不适用于此处。
如果你想修改 i
和 return 它你需要使用 operator *=
这将修改 i
并给你一个参考,你可以 return喜欢
return i *= 2;
但是 fun
需要 int&
而不是 const int &
。
如果你想 return 一个右值,那么你所做的就是 return 值,例如:
int fun(const int &i)
{
return 2*i;
}
现在您可以像这样捕捉它:
int main()
{
const int& ret = fun(3);
cout << ret << endl;
return 0;
}