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

为何std::string&重载函数被调用而非std::string&&重载函数?

为何std::string&重载函数被调用而非std::string&&重载函数?

嘿,这个问题的核心其实是C++里一个容易踩的小坑:右值引用变量本身是左值!

咱们拆解下你的代码流程:

  1. 你创建了foo这个普通的std::string左值,用std::move(foo)把它转换成右值类型,接着绑定到bar——这个std::string&&类型的变量上。
  2. 但要注意!bar是有名字的变量,只要是有名字的实体,在C++里都会被当作左值处理,哪怕它的类型是右值引用。所以当你调用process(bar)时,编译器看到的是一个左值参数,自然会匹配接受左值引用的process(std::string&)重载,输出就是reference: foo了。

如果想调用右值引用的重载版本,你需要再次把bar转换成右值,比如用std::move(bar)或者std::forward<std::string&&>(bar),这样编译器就会匹配process(std::string&&),输出moved: foo啦。

备注:内容来源于stack exchange,提问作者Jacob Krieg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 17:28:11