আমি নিজেকে খুঁজে পেয়েছি সম্পূর্ণরূপে এর যুক্তি বুঝতে পারছি না std::move()
।
প্রথমদিকে, আমি এটি গুগল করেছিলাম তবে মনে হয় কেবল কীভাবে ব্যবহার করতে হবে std::move()
তার নথিতে রয়েছে , এর কাঠামোটি কীভাবে কাজ করে তা নয়।
আমি বলতে চাইছি, টেমপ্লেট সদস্যের ফাংশনটি কী তা আমি জানি তবে যখন আমি std::move()
ভিএস 2010-এ সংজ্ঞাটি দেখি তখনও এটি বিভ্রান্তিকর।
std :: اقدام () এর সংজ্ঞাটি নীচে যায়।
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);
}
আমার কাছে প্রথমে যা অদ্ভুত তা হ'ল প্যারামিটারটি (__আর &&_আর্গ), কারণ যখন আমি নীচের মত দেখতে ফাংশনটি কল করি তখন,
// main()
Object obj1;
Object obj2 = std::move(obj1);
এটি মূলত সমান
// std::move()
_Ty&& _Arg = Obj1;
তবে আপনি ইতিমধ্যে জানেন যে আপনি কোনও এলভালুকে সরাসরি আরভ্যালু রেফারেন্সের সাথে সংযুক্ত করতে পারবেন না, যা আমাকে এইরকম হওয়া উচিত বলে মনে করে।
_Ty&& _Arg = (Object&&)obj1;
তবে এটি অযৌক্তিক কারণ std :: পদক্ষেপ () অবশ্যই সমস্ত মানের জন্য কাজ করে work
সুতরাং আমি অনুমান করি যে এটি কীভাবে কাজ করে তা পুরোপুরি বুঝতে, আমার এই স্ট্রাক্টগুলিও একবার দেখে নেওয়া উচিত।
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;
};
দুর্ভাগ্যক্রমে এটি এখনও বিভ্রান্তিকর এবং আমি এটি পাই না।
আমি জানি যে এটি আমার সি ++ সম্পর্কে বেসিক সিনট্যাক্স দক্ষতার অভাবের কারণেই। আমি কীভাবে এইগুলি পুরোপুরিভাবে কাজ করে তা জানতে এবং ইন্টারনেটে আমার কাছে পাওয়া যে কোনও ডকুমেন্টগুলি স্বাগত জানার চেয়ে আরও বেশি পছন্দ হবে তা জানতে চাই। (যদি আপনি কেবল এটি ব্যাখ্যা করতে পারেন তবে তা দুর্দান্তও হবে)।
move
কীভাবে এটি কার্যকর করা হয় তার চেয়ে কীভাবে কাজ করে তা বুঝতে আমি এখানে এসেছি । আমি এই ব্যাখ্যাটি সত্যই দরকারী বলে মনে করি: pagefault.blog/2018/03/01/… ।