2012-03-19 15 views
16

मैं कुछ कोड की समीक्षा कर रहा हूं और मैं कुछ कोड में भाग गया जो मैं अपरिचित हूं। कुछ खोज करने के बाद मैं इस घोषणा के लाभ या इस घोषणा के लाभ के किसी भी उदाहरण से नहीं आ सकता था।सी ++ कॉन्स्ट पॉइंटर घोषणा

myClass const * const myPtr = myClass->getPointer(); 

क्या यह एक कॉन्स्ट पॉइंटर या कुछ पूरी तरह से अलग है?

उत्तर

24

इसका मतलब है "myPtrconstconstmyClass पर पॉइंटर है"। इसका अर्थ यह है कि आप को संशोधित नहीं कर सकते हैं जो पॉइंटर पर इस पॉइंटर के माध्यम से इंगित कर रहा है और न ही पॉइंटर पॉइंट कहीं और प्रारंभ करने के बाद (myClass->getPointer() के वापसी मूल्य से) कर सकता है। तो हाँ, आप मूल रूप से सही हैं, इसके अतिरिक्त यह const ऑब्जेक्ट को इंगित करता है (जहां तक ​​आप जानते हैं; यह वास्तव में गैर-const नीचे हो सकता है)।

याद रखें कि const आइटम पर बाईं ओर स्थित होता है (या यदि उसके बाईं ओर कोई आइटम नहीं है, तो आइटम इसके दाईं ओर है)। पहला constmyClassconst बनाता है (जहां आप पॉइंटर पॉइंट्स को संशोधित नहीं कर सकते हैं) और दूसरा const* कॉन्स बनाता है (जहां आप पॉइंटर को स्वयं संशोधित नहीं कर सकते)।

+6

"याद रखें कि स्थिरांक इसके लिए आइटम शेष पर लागू होता है (या अगर कोई वस्तु है इसके बाईं ओर, आइटम इसके दाहिने ओर)। "- यह अंगूठी वर्गीकृत करने में मैंने अंगूठे का सबसे अच्छा, सरल, सबसे आसान नियम है। – linbianxiaocao

1

यह एक निरंतर मूल्य के लिए एक निरंतर सूचक, एक भिन्नता सूचक myClass

2

सेठ पैसे पर है के सदस्य फ़ंक्शन को कॉल करके लौटे घोषणा की। कुछ और पृष्ठभूमि है जो आपको Duramecho पर भी उपयोगी लग सकती हैं।

3

नियम यह है कि const कीवर्ड इसके बाईं ओर "शब्द" पर लागू होता है, जब तक कि यह लाइन पर पहला शब्द न हो, इस स्थिति में यह इसके दाईं ओर "शब्द" पर लागू होता है। तो: myClass const * const: myClass < - कॉन्स, पॉइंटर < - कॉन्स, कॉन्स पॉइंटर मेरे क्लास को कॉन्स करने के लिए।

किसी कारण से, अधिकांश कोड (कम से कम मैंने देखा है) में, इसे const myClass * const के रूप में घोषित किया जाएगा। मुझे कोई सुराग क्यों नहीं है, क्योंकि अब आपको अपवाद लेना है कि "कॉन्स बाईं ओर वाले शब्द पर लागू होता है, जब तक यह लाइन पर पहला शब्द नहीं है"। I.e: जिस कोड की आप समीक्षा कर रहे हैं उसमें लेखन लाइनों का तरीका बहुत स्पष्ट है।

17

कुछ मामलों में, आप देख सकते हैं इसे इस तरह लिखा:

const myClass * const myPtr = myClass->getPointer(); 

दो बराबर, एक निरंतर वस्तु को अर्थात् एक निरंतर सूचक हैं। मैं वाक्य रचना है क्योंकि यह आसान है जब पढ़ा नवागंतुकों के लिए समझने के लिए आप इसे दिखाया है के रूप में पसंद करते हैं दाएँ-से-बाएँ:

Object * const obj;  // read right-to-left: const pointer to Object 
Object const * obj;  // read right-to-left: pointer to const Object 
Object const * const obj; // read right-to-left: const pointer to const Object 
संबंधित मुद्दे