केवल पुष्टि के लिए मैं std::move
के बारे मेंक्यों std :: चाल lvaue संदर्भ की बजाय forward_reference लेता
std::move
क्या समझ में आ - धर्मान्तरित T&
T&&
चाहते हैं ताकि T's
चाल निर्माता में (किक अगर यह मौजूद होगा अन्यथा प्रतिलिपि ctor होगा जब तक हम बाहरी रूप से हटाए गए कदम ctor/असाइनमेंट नहीं हैं) तब तक इसकी भूमिका निभाएं।
जब मैं std::move
के संभावित कार्यान्वयन देखा है यह है
template<typename T>
typename remove_reference<T>::type&& move(T&& param)
{
using ReturnType =typename remove_reference<T>::type&&;
return static_cast<ReturnType>(param);
}
कारण यह remove_reference<T>
का उपयोग करता संदर्भ गिर कि forward_reference पर लागू की वजह से है जैसे T&&
मैं सिर्फ आश्चर्य है कि क्यों हम आगे संदर्भ की आवश्यकता है, हम इसे
template<typename T>
T&& moveInQuestion(T& p){
return static_cast<T&&>(p);
}
struct someType{};
someType lvalref;
static_assert(is_same<decltype(moveInQuestion(lvalref)),decltype(std::move(lvalref))>::value,"");
द्वारा नहीं किया जा सका 0 विफल नहीं हुआ है।
और मैं यह भी मानना है कि मूल्य वर्ग कि std::move
के लिए इस मामले moveInQuestion
संभवतः std::move
की तुलना में बेहतर हो सकता है किया जा रहा है के साथ एक lvalue
है? अपने move
, इस टूट जाता है जब T
, bool
है के बाद से यह मामला x[0]
में एक lvalue की तुलना में एक prvalue प्रॉक्सी संदर्भ बल्कि है