2014-09-10 80 views
3

簡而言之,我有這個類,我想移動包裝的對象。何時std ::移動冗餘?

std::string m_S; 
string_t(string_t&& s) 
    : m_S(s.m_S) 
{ 
} 

予省略周圍的類結構,只是增加了完整性起見,部件m_S

我是否需要用std::move來包裝成員訪問權限,還是僅僅因爲s作爲右值引用而被傳遞?

+0

這裏需要'std :: move',因爲's'在這裏是一個左值。有好的重複,我會盡力找到一個。 – juanchopanza 2014-09-10 15:38:06

回答

6

您確實需要move這裏。 s.m_S是一個左值表達式,所以不會綁定到_rvalue_參考。

即使s本身就是一個左值表達,所以你也需要會move如果你想用它來移動構造一個變量。

+0

當你思考什麼'std :: move'真的做什麼和什麼構成一個右值(臨時)我想我開始得到它,雖然有些情況下這是爲你做的,這不完全是自我解釋的作爲價值回報)。 – 2014-09-11 12:51:16

1

如果函數參數類型是rvalue-reference,則參數仍然是函數內部的左值(以及ctors init-list)。

因此,如果你的意思是真的需要使用std::move或等價物。