2011-04-03 57 views
12

我也不是很明白的std::move功能移動語義的std ::移動

template <class T> 
typename remove_reference<T>::type&& 
move(T&& a) 
{ 
    return a; 
} 

爲什麼remove_reference? 有人可以給我一個簡單的解釋?

回答

17

想想如果T是一個左值引用,例如MyClass &會發生什麼。在這種情況下,T &&將變爲MyClass & &&,並且由於參考摺疊規則,這將再次轉換爲MyClass &。爲了達到正確的結果,typename remove_reference<MyClass&>::type&&首先從該類型中刪除任何參考修飾,因此MyClass &映射到MyClass,然後將右值引用應用於它,產生MyClass &&

+0

是的,這是完全正確的,但顯然有人不同意:) – 2011-04-03 12:06:43

+1

@讓:你是什麼意思?到目前爲止,我看到我的回答沒有downvote ... – fredoverflow 2011-04-03 12:14:59

+0

嚴。我在10分鐘前寫下了同樣的東西,並投了票。 – 2011-04-03 12:16:03