右值引用何时会导致移动与复制构造函数,为什么?[复制]

When does an rvalue reference result in a move vs copy constructor and why? [duplicate]

提问人:Suat Mutlu 提问时间:6/19/2023 最后编辑:Solomon UckoSuat Mutlu 更新时间:6/19/2023 访问量:85

问:

我对右值引用的显式用法感到困惑。

假设我们有一个名为 ClassX 的类,它有所有的复制和移动方法。当我执行下面的代码时,调用了不同的复制方法(复制构造函数和移动构造函数)。但我希望总是执行移动构造函数。当我将对象显式绑定到右值引用并将其用作复制对象时,为什么会调用复制构造函数?

ClassX c = std::move(object_c);  // Invokes move constructor

ClassX&& cr = std::move(object_c);
ClassX c = cr;  // Invokes copy constructor
C++ Move 复制构造函数 move-semantics rvalue-reference

评论

6赞 Eljay 6/19/2023
如果它有名称,则它是一个左值。 是一个名称,它是一个左值。cr
2赞 Daniel Langr 6/19/2023
右值引用绑定到右值。但是,这个引用本身是否是一个右值是一个完全独立的问题。
4赞 Eljay 6/19/2023
没错,代码应该做.请记住,它本身不会移动任何东西,它只允许移动,因为如果变量是未命名的临时变量(例如返回值或表达式的结果)。它还允许将变量绑定到右值引用(通常对参数传递有用)。如果您觉得这令人困惑,那么您并不孤单;这是令人困惑的。ClassX c = std::move(cr);std::move

答: 暂无答案