顯然,可以將右值引用傳遞給std::thread
構造函數。我的問題是在cppreference中定義這個構造函數。它說,這種構造:std :: thread構造函數如何檢測右值引用?
template< class Function, class... Args >
explicit thread(Function&& f, Args&&... args);
創建新的std :: thread對象,並將其與 執行線程關聯。首先,構造拷貝/移動所有參數(這兩個 函數對象f和所有ARGS ...),以線程訪問的存儲彷彿 由函數:
template <class T>
typename decay<T>::type decay_copy(T&& v) {
return std::forward<T>(v);
}
至於我可以檢查:
std::is_same<int, std::decay<int&&>::type>::value
返回true。這意味着std::decay<T>::type
會刪除參數的右參考部分。那麼std::thread
構造函數如何知道哪個參數是由左值或右值引用傳遞的?因爲所有T&
和T&&
將std::decay<T>::type
轉換爲T
」將值左值,數組指向和函數指針隱式轉換應用於類型T,刪除cv限定符,並將結果類型定義爲成員typedef類型「http:// en.cppreference.com/w/cpp/types/decay - 你在哪裏看到它會刪除引用? – xaxxon
@xaxxon你缺少':: type'。 –
@ T.C。刪除 - 但爲什麼他們是一樣的? – xaxxon