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एक कॉन्स्टेंट पॉइंटर या संदर्भ आईएनजी अनफिल्टर्ड राइट और मेथड एक्सेस की अनुमति देता है। इसके विपरीत mutableAPI डिज़ाइनर को constअपवादों पर बारीक नियंत्रण रखने के लिए डिज़ाइनर की आवश्यकता होती है, और आमतौर पर ये अपवाद constनिजी डेटा पर काम करने वाले तरीकों में छिपे होते हैं ।
(एनबी मैं डेटा और विधि दृश्यता को कुछ समय के लिए संदर्भित करता हूं। मैं सार्वजनिक बनाम निजी या संरक्षित के रूप में चिह्नित सदस्यों के बारे में बात कर रहा हूं, जो यहां चर्चा की गई एक पूरी तरह से वस्तु सुरक्षा है ।)