यह संदर्भ के संदर्भ में नहीं है; ऐसा कुछ नहीं है।
जो आप देख रहे हैं वह एक सी ++ 0x rvalue reference है, जो डबल एम्परसेंड, &&
द्वारा दर्शाया गया है। इसका मतलब यह है कि फ़ंक्शन में i
तर्क अस्थायी है, इसलिए फ़ंक्शन को कॉलिंग कोड में समस्याएं उत्पन्न किए बिना अपने डेटा को क्लॉबर करने की अनुमति है।
उदाहरण:
void function(int &i); // A
void function(int &&i); // B
int foo();
int main() {
int x = foo();
function(x); // calls A
function(foo()); // calls B, because the return value is a temporary
}
यह बहुत ही कम सादे int
रों के साथ उपयोगी है, लेकिन बहुत उपयोगी होता है जब इस कदम कंस्ट्रक्टर्स को परिभाषित करने, उदाहरण के लिए। एक चालक कन्स्ट्रक्टर एक कॉपी कन्स्ट्रक्टर की तरह है, सिवाय इसके कि यह मूल ऑब्जेक्ट से आंतरिक डेटा को सुरक्षित रूप से 'चोरी' कर सकता है, क्योंकि यह एक अस्थायी है जो चालक रिटर्न के बाद मौजूद होना बंद कर देगा।
आह, ठीक है। स्पष्टीकरण के लिए धन्यवाद। इस कोड को अभी बढ़ावा (1.42) में कैसे है? यह मेरी समझ है कि वर्तमान में सी ++ 03 मानक के लिए बूस्ट लिखा गया है। –
@ सिल्वर: यह कुछ कंपाइलरों की सुविधाओं का लाभ उठाएगा। कुछ कंपाइलर्स सी ++ 0x (थोड़ा) का समर्थन करते हैं, और यदि बूस्ट इसका पता लगाने और उसका उपयोग करना चाहता है, तो यह होगा। – GManNickG
@ सिल्वरसुन: बूस्ट प्रत्येक कंपाइलर के लिए उपलब्ध है को अनुकूलित करने के लिए सशर्त संकलन (#if, आदि) का उपयोग करता है। –