为什么我们需要在构造函数的初始化列表中使用 std::move?

Why do we need std::move in constructor's initialisation list?

本文关键字:std move 列表 初始化 我们 构造函数 为什么      更新时间:2023-10-16

嗨,我正在阅读斯科特·迈耶(Scott Meyer(的有效现代C++,在其第25项中,它有这个例子:

class Widget {
public:
Widget(Widget&& rhs)
: name (std::move(rhs.name)),
p(std::move(rhs.p)
{ ... }
...
}

我的问题是为什么我们需要rhs.namestd::move?既然rhs已经是一个右值,这是否意味着rhs.name也是一个右值,所以我们可以安全地移动它?

由于rhs有一个名字,它不再是一个右值。

然后,您可以使用

std::move(rhs.name)

std::move(rhs).name

将(强制转换(name转换为右值引用。