显然,可以将右值引用传递给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