जैसा कि हर किसी ने उल्लेख किया है, कार्यान्वयन संदर्भ और पॉइंटर्स काफी हद तक समान हैं। वहाँ कुछ मामूली चेतावनियां हैं:
आप एक संदर्भ (shoosh इस उल्लेख) को शून्य असाइन नहीं कर सकते: के बाद से कोई "अनिर्धारित" या "अवैध" संदर्भ मूल्य कि महत्वपूर्ण है।
आप एक स्थिरांक संदर्भ, के रूप में एक अस्थायी चर पारित कर सकते हैं, लेकिन यह एक अस्थायी करने के लिए एक सूचक पारित करने के लिए कानूनी नहीं है।
उदाहरण के लिए, यह ठीक है:
class Thingy; // assume a constructor Thingy(int,int)
void foo(const Thingy &a)
{
a.DoSomething();
}
void bar()
{
foo(Thingy(1,2));
}
लेकिन सबसे compilers के बारे में
void foo2(Thingy * a);
void bar2()
{
foo(&Thingy(1,2));
}
- एक चर के पते ले रहा है एक सूचक प्राप्त करने के लिए संकलक बलों शिकायत इसे स्मृति में सहेजें। स्थानीय चर के संदर्भ को असाइन करना सिर्फ समानार्थी बनाता है; कुछ मामलों में यह संकलक को डेटा पर डेटा रखने की अनुमति दे सकता है और load-hit-store से बच सकता है। हालांकि, यह केवल स्थानीय चर पर लागू होता है - एक बार संदर्भ द्वारा पैरामीटर के रूप में कुछ पारित होने के बाद, इसे स्टैक करने के लिए सहेजने से कोई बचा नहीं जाता है।
void foo()
{
int a = 5;
// this may be slightly more efficient
int &b = a;
printf("%d", ++b);
// than this
int *c = &a;
printf("%d", ++(*c));
}
इसी तरह, __restrict keyword संदर्भ, केवल संकेत करने के लिए लागू नहीं किया जा सकता।
आप संदर्भ के साथ पॉइंटर अंकगणित नहीं कर सकते हैं, इसलिए यदि आपके पास एक सरणी में पॉइंटर है तो सरणी में अगला तत्व पी + 1 के माध्यम से हो सकता है, एक संदर्भ केवल एक चीज पर ही इंगित करता है पूरा जीवन।
आप वास्तव में अगर आप इसे प्रकार का एक सूचक को डाल सकते हैं और एक संदर्भ के लिए शून्य असाइन कर सकते हैं तो बिंदु भिन्नता उदा int और ref = * (int *) NULL; और यदि आप इसे एक संघ के भीतर रखते हैं और संघ में संबंधित मान को बदलते हैं तो आप संदर्भ को फिर से सौंप सकते हैं। –
और मुझे यह जोड़ना चाहिए कि इन्हें कभी नहीं किया जाना चाहिए क्योंकि जब कोई फ़ंक्शन संदर्भ के लिए पूछता है, तो यह कभी भी पूर्ण की अपेक्षा नहीं करता है, और हालांकि अधिकांश संदर्भ मूल रूप से पॉइंटर्स के समान ही लागू होते हैं, यह सभी परिदृश्यों में मामला नहीं हो सकता है/प्लेटफार्मों। –
यदि आप एक संघ के संबंधित मूल्य को आवंटित कर रहे हैं तो आप वास्तव में संदर्भ के लिए असाइन नहीं कर रहे हैं? – shoosh