明らかに、std::thread
コンストラクタに値の参照を渡すことは可能です。私の問題はcppreferenceのこのコンストラクタの定義にあります。std :: threadコンストラクタがrvalue参照を検出する方法は?
template< class Function, class... Args >
explicit thread(Function&& f, Args&&... args);
新しいはstd ::スレッドオブジェクトを作成し、 実行スレッドに関連付ける:それは、このコンストラクタがいることを言います。私の知る限り確認することができますよう
template <class T>
typename decay<T>::type decay_copy(T&& v) {
return std::forward<T>(v);
}
:まずコンストラクタコピーは/すべての引数(両方 関数オブジェクトfと、すべての引数...)スレッドアクセスするためのストレージを かのように機能によりを移動します。
std::is_same<int, std::decay<int&&>::type>::value
がtrueを返します。つまり、std::decay<T>::type
は引数の右辺参照部分を削除します。それではどのようにstd::thread
コンストラクタがlvalueまたはrvalue参照によって渡される引数を知っていますか?すべてT&
とT&&
はstd::decay<T>::type
"タイプTへの左から右への値、配列からポインタ、および関数からポインタへの暗黙の変換を適用し、cv修飾子を削除し、結果の型をメンバのtypedef型" http:// en.cppreference.com/w/cpp/types/decay - 参照が削除される場所はどこですか? – xaxxon
@xaxxonあなたは ':: type'がありません。 –
@ T.C。削除されました - しかし、なぜ彼らは同じですか? – xaxxon