警告:返回对临时的引用 - 奇怪的情况(右值的澄清)

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;
}