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

为何未调用Move assignment operator?请求解析以下代码

代码行为解释

核心原因很简单:右值引用变量本身是左值。

  • 函数参数Person&& rhs虽然是右值引用类型,但它是一个有名字的变量。在C++里,任何有名字的变量(哪怕是右值引用类型)在表达式中都会被当作左值处理——因为你能对它取地址,编译器认为它是一个“持久”的对象,而非临时的右值。
  • 所以lhs = rhs;这行代码中,rhs作为左值,会匹配类Person中接受const Person&参数的拷贝赋值运算符,执行拷贝操作。
  • 而当你把rhs强制转换为Person&&时,相当于显式告诉编译器:把这个左值当作右值(将亡值)来处理。此时编译器会匹配接受Person&&参数的移动赋值运算符,执行移动操作。

另外,更规范的写法是使用标准库的std::move函数来完成这个转换,而非C风格强制转换:

lhs = std::move(rhs);

std::move的作用就是将左值转换为右值引用,是C++中触发移动语义的标准方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 08:40:41