पहले में, आपने संकलक का वादा किया है, लेकिन कक्षा के अन्य उपयोगकर्ताओं को नहीं कि आप चर संपादित नहीं करेंगे।
अपने दूसरे उदाहरण में, आप वर्ग है कि आप अपने चर को संपादित नहीं होगा के अन्य उपयोगकर्ताओं का वादा किया है, लेकिन उस वादे को बनाए रखने में नाकाम रहे।
मैं भी ध्यान देना चाहिए वहाँ
bar* const variable
और
बीच एक स्पष्ट अंतर
const bar* variable
और
const bar* const variable
प्रथम रूप में, सूचक कभी नहीं बदल जाएगा है, लेकिन आप जिस वस्तु को इंगित करते हैं उसे संपादित कर सकते हैं। दूसरे रूप में, आप पॉइंटर को संपादित कर सकते हैं (इसे किसी अन्य ऑब्जेक्ट पर इंगित करें), लेकिन यह वैरिएबल कभी भी इंगित नहीं करता है। अंतिम रूप में, आप न तो सूचक को संपादित करेंगे, न ही ऑब्जेक्ट को इंगित करेंगे। Reference
सवाल में कहा गया है के लिए एक स्पष्टीकरण के एक थोड़ा और अधिक जोड़ने के लिए, आप हमेशा कम से कम और अधिक स्थिरांक वादा कर सकते हैं। बिना किसी समस्या के
Foo::func1(const int x) {}
Foo::func2(const int* const x) {}
:
Foo::func1(const int x) {}
Foo::func2(const int *x) {}
या:
class Foo {
void func1 (int x);
void func2 (int *x);
}
आप निम्न कार्यान्वयन संकलन कर सकते हैं: एक वर्ग को देखते हुए। आपने अपने उपयोगकर्ताओं को बताया है कि आप संभवतः अपने चर संपादित कर सकते हैं। आपके कार्यान्वयन में, आपने संकलक को बताया है कि यह विशेष कार्यान्वयन उन चरों को संपादित नहीं करेगा, भले ही आपके द्वारा बताए गए उपयोगकर्ताओं को बताया गया हो। आपने उपयोगकर्ता को कोई वादा नहीं तोड़ा है, और इसलिए कोड संकलित करता है।
स्रोत
2008-11-06 19:07:02
आप अपने दूसरे उदाहरण में * के दूसरे पक्ष पर स्थिरांक डाल करने के लिए मतलब है? कुछ लोग इसके अर्थ में अंतर बताकर जवाब दे रहे हैं, और अन्य लोग इस बात को समझकर जवाब दे रहे हैं कि कॉन्स सीपीपी या एच फाइल में है या नहीं। –
आपको अपने प्रश्न के लिए एक एवर चुनना चाहिए या अपडेट करना चाहिए यदि यह वह उत्तर नहीं है जिसे आप ढूंढ रहे हैं। –