2017-08-05 120 views
1

您好我正在讀通過斯科特·邁爾的有效的現代C++,並在其第25項已這個例子:爲什麼我們需要在構造函數的初始化列表中使用std :: move?

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

我的問題這裏爲什麼我們需要std::moverhs.name?由於rhs已經是右值,這是不是暗示rhs.name也是一個右值,所以我們可以安全地移動它?

+0

右值引用是左值 – xaxxon

回答

2

由於rhs有一個名稱,它不再是一個右值。

您然後可以使用

std::move(rhs.name) 

std::move(rhs).name 

變換(澆鑄)name成右值參考。

相關問題