"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > std::move() C++ में Lvalues ​​को कैसे संभालता है?

std::move() C++ में Lvalues ​​को कैसे संभालता है?

2024-11-13 को प्रकाशित
ब्राउज़ करें:496

How Does std::move() Handle Lvalues in C  ?

std::move() lvalues ​​पर क्या करता है?

std::move() सुविधा के लिए C में एक शक्तिशाली उपकरण है उत्तम अग्रेषण. फिर भी इसका कार्यान्वयन पहली नज़र में कुछ लोगों की भौंहें चढ़ा सकता है। यह स्पष्ट करने के लिए कि std::move() इसे कैसे प्राप्त करता है, आइए इसके कार्यान्वयन की जटिलताओं पर गौर करें।

'मूव' फ़ंक्शन को समझना

हम शुरुआत करेंगे 'मूव' फ़ंक्शन टेम्पलेट का सरलीकृत संस्करण:

template 
typename remove_reference::type&& move(T&& arg)
{ return static_cast::type&&>(arg); }

केस 1: एक Rvalue पास करना

जब std::move() को एक rvalue के साथ कॉल किया जाता है (एक अस्थायी वस्तु या एक अभिव्यक्ति जो एक rvalue का मूल्यांकन करती है) , मूव टेम्प्लेट को इस प्रकार त्वरित किया जाता है:

// move with [T = Object]:
remove_reference::type&& move(Object&& arg)
{ return static_cast::type&&>(arg); }

ऑब्जेक्ट ए; // ए लवल्यू है ऑब्जेक्ट b = std::move(a);

Object&& move(Object&& arg) { return static_cast(arg); }

// [T = ऑब्जेक्ट&] के साथ मूव करें हटाएं_संदर्भ::प्रकार&& स्थानांतरित करें(ऑब्जेक्ट&&& arg) { return static_cast::type&&>(arg); ) }

पहली नज़र में, यह उल्टा लगता है क्योंकि हम एक अंतराल पार कर चुके हैं। हालाँकि, सी 11 रेफरेंस कोलैप्सिंग की अवधारणा का परिचय देता है, जो संदर्भ सिंटैक्स की व्याख्या को संशोधित करता है:

ऑब्जेक्ट & & = ऑब्जेक्ट &
Object a; // a is lvalue
Object b = std::move(a);
ऑब्जेक्ट & & && = ऑब्जेक्ट &

ऑब्जेक्ट & && & = ऑब्जेक्ट &
Object a; // a is lvalue
Object b = std::move(a);
ऑब्जेक्ट & && & && = ऑब्जेक्ट & &&

Object&& move(Object& && arg) { return static_cast(arg); }

इसलिए, फ़ंक्शन का अंतिम रूप बन जाता है:Object&& move(Object& arg) { return static_cast(arg); }

    संक्षेप में, std::move() लैवल्यू तर्क को प्रतिद्वंद्विता संदर्भ में डालता है, जिससे इनपुट प्रकार की परवाह किए बिना सही अग्रेषण सक्षम होता है।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3