这会对代码产生任何影响吗

Would this make any difference in the code

我想了解 std::move 的作用,它似乎只是转换为右值引用。在这种情况下,下面两段代码是相等的,对吧?即使对于第二种情况,我们也无法调用移动构造函数。否则移动后输入的人将失效。我的理解正确吗?

void setSomething(Person person) {
  localPerson_ = person;
}

v.s.

void setSomething(Person person) {
  localPerson_ = std::move(person);
}

是的,这很重要。

it's just casting to rvalue reference.

准确地说它转换为右值。参数 person 是左值,std::move 会将其转换为右值。对于localPerson_ = person;,进行复制赋值;对于 localPerson_ = std::move(person);,执行移动分配。换句话说,我们需要明确地使用 std::move 才能执行移动操作。之后 person 的状态将取决于 Person.

的实施

LIVE

第一种情况调用赋值运算符。 Person 之后仍然有效。

第二种情况调用移动赋值运算符。 Person移动后失效。对于一些无效的定义,取决于移动赋值运算符代码。它应该类似于默认构造的对象。