You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何返回左值引用的函数无法返回具名右值引用?

问题:具名右值引用返回时的编译差异

在C++中,具名右值引用属于左值,但为何以下代码会报错error: cannot bind non-const lvalue reference of type 'int&' to an rvalue of type 'int'?

int & unmove(int && t)
{
    return t;
}

而以下代码可以正常运行:

int & unmove(int && t)
{
    int & r = t;
    return r;
}

原因解析

这是因为C++对return语句中的右值引用参数有特殊规则:

  • 当直接返回函数参数的具名右值引用t时,编译器会把它识别为将亡值(xvalue)——这属于右值范畴。此时试图把这个右值绑定到返回类型int&(非const左值引用)上,就违反了“非const左值引用不能绑定右值”的规则,触发编译错误。
  • 先把t绑定到左值引用r之后,r是明确的左值。返回r时,编译器直接按左值处理,完全符合int&的返回要求,因此可以正常编译。

简单来说:直接返回右值引用参数时,编译器会“降级”它的属性为右值;通过左值引用中转后,就保留了左值属性,满足返回类型的要求。

内容的提问来源于stack exchange,提问作者zwhconst

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 11:19:52