std::move बनाम std::forward: Rvalue हैंडलिंग के लिए विशिष्टता का अनावरण
C में मूव सिमेंटिक्स के आगमन की शुरुआत हुई है प्रतिद्वंद्विता संदर्भों में हेरफेर और स्थानांतरण के लिए दो महत्वपूर्ण कार्य: std::move और std::forward। जबकि दोनों एक ऑब्जेक्ट को संदर्भ प्रकार में डालते हैं, वे अपने विशिष्ट व्यवहार और उपयोग के मामलों में भिन्न होते हैं।
std::move: एक Rvalue संदर्भ में कास्टिंग
std:: move एक ऑब्जेक्ट लेता है और इसे एक प्रतिद्वंद्विता संदर्भ में परिवर्तित करता है। यह महत्वपूर्ण है क्योंकि एक प्रतिद्वंद्विता संदर्भ आम तौर पर यह दर्शाता है कि संदर्भित वस्तु को उपभोग के बाद अस्थायी और संभावित रूप से अमान्य माना जा सकता है। संक्षेप में, std::move आपको यह संकेत देने की अनुमति देता है कि आप किसी ऑब्जेक्ट को उसके वर्तमान स्थान से "स्थानांतरित" करने का इरादा रखते हैं, संभावित रूप से उस पर मौजूद अंतर्निहित मेमोरी को मुक्त कर देते हैं।
std::forward: परफेक्ट फ़ॉरवर्डिंग दूसरी ओर, Rvalue References
std::forward, एक विशिष्ट उद्देश्य को पूरा करता है: यह सुनिश्चित करता है कि एक फ़ंक्शन संदर्भ प्रकार को आगे बढ़ाता है कॉल करने वाले को तर्क. यह "संपूर्ण अग्रेषण" को सक्षम बनाता है, जिसका अर्थ है कि किसी फ़ंक्शन को दिए गए प्रतिद्वंद्विता तर्क उस फ़ंक्शन के भीतर प्रतिद्वंद्विता के रूप में माने जाते रहेंगे। इन अस्थायी मूल्यों के इच्छित शब्दार्थ को संरक्षित करने के लिए यह महत्वपूर्ण है। और वांछित परिणाम:
जब आपका इरादा हो तो std::move
का उपयोग करें किसी ऑब्जेक्ट को स्थानांतरित करें, यह दर्शाता है कि इसका मूल्य बाद में उपयोग नहीं किया जाएगा और आप संभावित रूप से इसकी मेमोरी को पुनः प्राप्त करना चाहते हैं।std::forward के माध्यम से: rvalue द्वारा std::move के माध्यम से: rvalue द्वारा साधारण पासिंग द्वारा: rvalue द्वारा
void overload(int const& arg) { std::cout void forwarding(t&& arg) { std::cout (arg)); std::coutइसके विपरीत , फ़ॉर्वर्डिंग (x) को लैवल्यू (x = 5) के साथ कॉल करने से:
via std::forward: by rvalue via std::move: by rvalue by simple passing: by rvalueयहां, std::forward और std::move दोनों ने अपनी विशिष्ट भूमिकाओं को उजागर करते हुए, lvalue को एक rvalue संदर्भ में डाल दिया।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3