मैंने सिर्फ अपने आप को तर्क के बारे में पूरी तरह से नहीं समझा std::move()
।
सबसे पहले, मैंने इसे googled किया, लेकिन ऐसा लगता है कि कैसे उपयोग करने के बारे में केवल दस्तावेज हैं std::move()
, न कि इसकी संरचना कैसे काम करती है।
मेरा मतलब है, मुझे पता है कि टेम्पलेट सदस्य फ़ंक्शन क्या है, लेकिन जब मैं std::move()
VS2010 में परिभाषा में देखता हूं , तो यह अभी भी भ्रमित है।
एसटीडी की परिभाषा :: चाल () नीचे जाती है।
template<class _Ty> inline
typename tr1::_Remove_reference<_Ty>::_Type&&
move(_Ty&& _Arg)
{ // forward _Arg as movable
return ((typename tr1::_Remove_reference<_Ty>::_Type&&)_Arg);
}
मेरे लिए सबसे पहले जो अजीब है वह है पैरामीटर, (_Ty && _Arg), क्योंकि जब मैं फ़ंक्शन को कॉल करता हूं, जैसे कि नीचे देखें,
// main()
Object obj1;
Object obj2 = std::move(obj1);
यह मूल रूप से के बराबर है
// std::move()
_Ty&& _Arg = Obj1;
लेकिन जैसा कि आप पहले से ही जानते हैं, आप सीधे LValue को RValue के संदर्भ में लिंक नहीं कर सकते हैं, जिससे मुझे लगता है कि यह इस तरह होना चाहिए।
_Ty&& _Arg = (Object&&)obj1;
हालाँकि, यह बेतुका है क्योंकि std :: move () सभी मूल्यों के लिए काम करना चाहिए।
इसलिए मुझे लगता है कि यह पूरी तरह से कैसे काम करता है, मुझे इन संरचनाओं पर भी एक नज़र डालनी चाहिए।
template<class _Ty>
struct _Remove_reference
{ // remove reference
typedef _Ty _Type;
};
template<class _Ty>
struct _Remove_reference<_Ty&>
{ // remove reference
typedef _Ty _Type;
};
template<class _Ty>
struct _Remove_reference<_Ty&&>
{ // remove rvalue reference
typedef _Ty _Type;
};
दुर्भाग्य से यह अभी भी भ्रामक है और मुझे नहीं मिला।
मुझे पता है कि यह सब C ++ के बारे में बुनियादी वाक्यविन्यास कौशल की कमी के कारण है। मैं जानना चाहता हूं कि ये कैसे पूरी तरह से काम करते हैं और इंटरनेट पर मुझे मिलने वाले किसी भी दस्तावेज का स्वागत करने की तुलना में अधिक होगा। (यदि आप इसे केवल समझा सकते हैं, तो यह बहुत बढ़िया होगा)।
move
कि यह कैसे लागू होता है, इसके बजाय कैसे काम करता है। मुझे यह स्पष्टीकरण वास्तव में उपयोगी लगता है: pagefault.blog/2018/03/01/… ।