कैसे std::forward Lvalue और Rvalue संदर्भों को सही ढंग से अग्रेषित करने की सुविधा प्रदान करता है
C में, std::forward प्राप्त करने में महत्वपूर्ण भूमिका निभाता है उत्तम अग्रेषण, जो यह सुनिश्चित करता है कि तर्कों को उनके मूल मूल्य श्रेणी को संरक्षित रखते हुए कार्यों में पारित किया जाता है। लैवल्यू और रेवैल्यू संदर्भों से निपटने के दौरान यह व्यवहार विशेष रूप से भ्रमित करने वाला हो सकता है।
लवैल्यू बनाम रेवैल्यू अंतर
"यदि इसका कोई नाम है, तो यह एक लैवल्यू है।" हालांकि यह कहावत आम तौर पर सच है, यह thing&& x बनाम thing& x से निपटने के दौरान std::forward के व्यवहार को पूरी तरह से स्पष्ट नहीं करती है।
Lvalue References (thing& x)
जब कोई तर्क लैवल्यू संदर्भ द्वारा पारित किया जाता है, तो यह फ़ंक्शन के भीतर एक लैवल्यू संदर्भ बना रहता है। लवल्यू संदर्भ हमेशा एक विशिष्ट, नामित मेमोरी स्थान से बंधे होते हैं। या तो एक प्रतिद्वंद्विता संदर्भ या परिवर्तित अंतराल संदर्भ हो सकता है। एक प्रतिद्वंद्विता संदर्भ एक अस्थायी वस्तु या एक मूल्य से जुड़ा होता है जिसे स्थानांतरित किया जा रहा है।
std::forward कैसे काम करता है
std::forward को एक विशेष द्वारा परिभाषित किया गया है रूपांतरण तालिका। इसका प्राथमिक उद्देश्य किसी भी प्रकार के संदर्भ को प्रतिद्वंद्विता संदर्भ में परिवर्तित करना है। यह रूपांतरण मूल तर्क की मान श्रेणी को नहीं बदलता है। :
टेम्पलेट
शून्य परफेक्टसेट(T&& t) {
सेट(std::forward
std::vector
हालांकि, यदि परफेक्टसेट को एक rvalue के साथ बुलाया जाता है, तो T को T&& के रूप में अनुमानित किया जाता है, और std::forward तर्क को एक rvalue संदर्भ में परिवर्तित करता है, जिससे सेट में मूव सिमेंटिक्स को सक्षम किया जाता है:perfectSet(makeAndFillVector()); // rvalue संदर्भ सेट करने के लिए पारित किया गया है
निष्कर्षtemplatevoid perfectSet(T&& t) { set(std::forward (t)); }
std::forward एक शक्तिशाली उपकरण है जो कार्यों में पारित तर्कों की मूल्य श्रेणी को संरक्षित करके सही अग्रेषण की सुविधा प्रदान करता है। यह इष्टतम प्रदर्शन और कोड शुद्धता सुनिश्चित करते हुए मूल्यों के कुशल और प्रकार-सुरक्षित हस्तांतरण को सक्षम बनाता है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3