在C++ 11標準它指出(見cppreference.com,也參見標準的第20.4.2.4)它指出爲什麼std :: make_tuple將std :: reference_wrapper參數轉換爲X&?
template< class... Types >
tuple<VTypes...> make_tuple(Types&&... args);
創建一個元組對象,從類型推斷目標類型的論據。
對於
Types...
每個Ti
,相應的類型Vi
在Vtypes...
是std::decay<Ti>::type
除非的std::decay
導致std::reference_wrapper<X>
對於某些類型X
,在這種情況下,推定的類型是X&
應用。
我想知道:爲什麼參考包裝在這裏特別對待?
我認爲主要的觀點是'std :: reference_wrapper'是一個傳統的標記(特殊處理),它在rvalue引用之前是必需的,請參閱http://stackoverflow.com/questions/20080493/semantics-for-wrapped-objects -reference-value-by-default-via-stdmove-stdref?rq = 1。我認爲它在C++ 11中應該是必需的,但是這個慣例依然存在。 – alfC