तथ्य यह है कि आप एक विधि कॉल कर रहे हैं, यहां कोई महत्व नहीं है। फंक्शन कॉल के दौरान संदर्भ पैरामीटर प्रारंभिक स्टैंडअलोन संदर्भ प्रारंभ से अलग नहीं है और उसी नियम द्वारा शासित है।
संदर्भ प्रारंभिकरण के नियम थोड़ा जटिल हैं, लेकिन नीचे की रेखा यह है कि यदि प्रारंभकर्ता एक लवल्यू (आपके मामले में विधि कॉल में तर्क) है और संदर्भ का प्रकार समान प्रकार के जैसा है प्रारंभकर्ता (यानी पैरामीटर का प्रकार तर्क प्रकार के समान होता है), तो संदर्भ सीधे बाध्य होगा। अर्थात। कोई प्रतिलिपि नहीं बनाई गई है।
Object a; // class type
Object &r = a; // no copying
const Object &cr = a; // no copying
यदि इन आवश्यकताओं को पूरा नहीं किया जाता है (जैसे प्रारंभकर्ता एक उदाहरण है, उदाहरण के लिए), तो यह सब निर्भर करता है। कुछ मामलों में प्रतिलिपि हो सकती है और हो जाएगी। उदाहरण के लिए
const Object &tr = Object();
copyings के कार्यान्वयन पर निर्भर परिमित संख्या के साथ
const Object &tr = Object(Object(Object(Object())));
के रूप में संकलक द्वारा व्याख्या की जा सकती। निस्संदेह, दक्षता कारणों के लिए संकलक सामान्य रूप से अनावश्यक प्रतियां बनाने की कोशिश नहीं कर रहे हैं, भले ही उन्हें कॉपी करने की अनुमति दी जाए।
एक उत्कृष्ट उदाहरण है कि अक्सर संकलक की नकल व्यवहार की वैधता के बारे में बहस stirs एक निम्नलिखित
Object a;
const Object &r = <some condition> ? a : Object();
की तरह भाव में संदर्भ आरंभीकरण एक व्यक्ति सी ++ संदर्भ अर्थ विज्ञान से परिचित समझना होगा कि है की तरह भाव उपरोक्त संदर्भ प्रारंभिकरण के दौरान अनावश्यक प्रतिलिपि करने के लिए मानक अनुमति के पीछे तर्क की संभावना है।
आपका शब्दावली का सुझाव नहीं होना चाहिए कि 'anotherObject' स्वयं की प्रतिलिपि पैदा कर रही है .. उद्देश्य यह है कि नए के बाद बनाई गई है' की एक प्रति बनाने वाले हैं anotherObject'। –
@ हसन: ओपी पूछे बिना प्रश्न का अर्थ न बदलें। यह एक महत्वपूर्ण भेद है। '& anotherObject' एक सूचक है, संदर्भ नहीं। –
"कोई यह नहीं बता सकता" कि 'नया ऑब्जेक्ट (और अन्य ऑब्जेक्ट)' किसी अन्य ऑब्जेक्ट की प्रतिलिपि बना देगा (जो शब्द सुझाव दे रहा है)। उस कथन को सही रखने के लिए, वाक्यविन्यास को समायोजित करने की आवश्यकता है। –