mutable
कीवर्ड बेध लिए एक रास्ता है const
घूंघट आप अपने वस्तुओं पर कपड़ा। यदि आप एक स्थिरांक संदर्भ या किसी वस्तु के लिए सूचक है, तो आप किसी भी तरह से उस वस्तु संशोधित नहीं कर सकते छोड़कर कब और कैसे यह चिह्नित है mutable
।
आपके const
संदर्भ या सूचक के साथ आप इसके लिए विवश हैं:
- किसी भी दृश्यमान डेटा सदस्यों के लिए केवल एक्सेस पढ़ें
- केवल उन्हीं विधियों को कॉल करने की अनुमति है जिन्हें चिह्नित किया गया है
const
।
mutable
अपवाद यह बनाता है इसलिए अब आप लिख सकते हैं या सेट डेटा सदस्यों को बताया कि चिह्नित कर रहे हैं कर सकते हैंmutable
। यह केवल बाहरी रूप से दिखाई देने वाला अंतर है।
आंतरिक रूप से वे const
विधियां जो आपको दिखाई देती हैं, वे उन डेटा सदस्यों को भी लिख सकती हैं जो चिह्नित हैं mutable
। अनिवार्य रूप से कॉस्ट घूंघट को बड़े पैमाने पर छेद दिया जाता है। यह पूरी तरह से एपीआई डिजाइनर पर निर्भर है कि mutable
यह const
अवधारणा को नष्ट नहीं करता है और केवल उपयोगी विशेष मामलों में उपयोग किया जाता है। mutable
कीवर्ड क्योंकि यह स्पष्ट रूप से निशान डेटा सदस्यों को बताया कि इन विशेष मामलों के अधीन हैं मदद करता है।
व्यवहार में आप const
अपने कोडबेस में जुनूनी रूप से उपयोग कर सकते हैं (आप अनिवार्य रूप से "कोड" को const
"बीमारी" के साथ "संक्रमित" करना चाहते हैं )। इस दुनिया में संकेत और संदर्भ हैंconst
बहुत कम अपवादों के साथ , जो कोडिंग के बारे में तर्क करने और समझने में आसान होते हैं। एक दिलचस्प विषयांतर के लिए "संदर्भात्मक पारदर्शिता" देखें।
mutable
कीवर्ड के बिना आपको अंततः const_cast
विभिन्न उपयोगी विशेष मामलों को संभालने के लिए उपयोग करने के लिए मजबूर किया जाएगा (कैशिंग, रिफ गिनती, डीबग डेटा, आदि)। दुर्भाग्य const_cast
से काफी अधिक विनाशकारी है mutable
क्योंकि यह एपीआई क्लाइंट को const
उन वस्तुओं के संरक्षण को नष्ट करने के लिए मजबूर करता है जिसका वह उपयोग कर रहा है। इसके अतिरिक्त यह व्यापक const
विनाश का कारण बनता है : const_cast
एक कॉन्स्टेंट पॉइंटर या संदर्भ आईएनजी अनफिल्टर्ड राइट और मेथड एक्सेस की अनुमति देता है। इसके विपरीत mutable
API डिज़ाइनर को const
अपवादों पर बारीक नियंत्रण रखने के लिए डिज़ाइनर की आवश्यकता होती है, और आमतौर पर ये अपवाद const
निजी डेटा पर काम करने वाले तरीकों में छिपे होते हैं ।
(एनबी मैं डेटा और विधि दृश्यता को कुछ समय के लिए संदर्भित करता हूं। मैं सार्वजनिक बनाम निजी या संरक्षित के रूप में चिह्नित सदस्यों के बारे में बात कर रहा हूं, जो यहां चर्चा की गई एक पूरी तरह से वस्तु सुरक्षा है ।)