संपादित करें: मैंने कुछ प्रयोग किया है, और खोज की गई चीज मेरे विचार से थोड़ी सूक्ष्म है। यहाँ अब मुझे लगता है कि एक सटीक उत्तर है।
&s
जब तक संदर्भ का प्रकार संदर्भ नहीं होता है, तब तक आप एक संदर्भ नहीं बनाते हैं const
। उदाहरण के लिए, आप ऐसा नहीं कर सकते
string * &r = &s;
लेकिन आप कर सकते हैं
string * const &r = &s;
यदि आप फ़ंक्शन हेडर में इसी तरह की घोषणा करते हैं, तो यह काम करेगा।
void myfunc(string * const &a) { ... }
वहाँ एक और मुद्दा है, अर्थात्, अस्थायी। नियम यह है कि आप अस्थायी का संदर्भ तभी प्राप्त कर सकते हैं जब वह हो const
। तो इस मामले में कोई यह तर्क दे सकता है कि एक अस्थायी है, और इसलिए घोषित किया जाना चाहिएconst
फ़ंक्शन प्रोटोटाइप में किया । व्यावहारिक दृष्टिकोण से इस मामले में कोई फर्क नहीं पड़ता है। (यह या तो एक प्रतिद्वंद्विता या अस्थायी है। किसी भी तरह, एक ही नियम लागू होता है।) हालांकि, कड़ाई से बोलते हुए, मुझे लगता है कि यह एक अस्थायी नहीं बल्कि एक प्रतिद्वंद्विता है। मुझे आश्चर्य है कि क्या दोनों के बीच अंतर करने का कोई तरीका है। (शायद यह सीधे तौर पर परिभाषित किया गया है कि सभी अस्थायी व्यवस्थाएं हैं, और सभी गैर-भाषाएं अस्थायी हैं। मैं मानक पर विशेषज्ञ नहीं हूं।)
कहा जा रहा है, आपकी समस्या शायद उच्च स्तर पर है। आप के पते का संदर्भ क्यों चाहते हैं s
? यदि आप एक पॉइंटर का संदर्भ चाहते हैं s
, तो आपको एक पॉइंटर को उसी रूप में परिभाषित करना होगा
string *p = &s;
myfunc(p);
यदि आप s
किसी पॉइंटर या पॉइंटर का संदर्भ चाहते हैं s
, तो सीधी बात करें।
string* const& val
जैसे की तरह एक कम सुपाठ्य बराबर के बजायconst string* &val
। मेरी नजर में यह स्पष्ट रूप से एक तार के लिए, एक पॉइंटर को, एक कॉस्ट रेफरेंस है । मैं व्यक्तिगत रूप से इस सटीक स्पष्टीकरण को प्राप्त करने के लिए घोषणाओं केT const&
बजाय लिखना पसंद करता हूंconst T&
।