कोड अभ्यस्त वास्तव में कुलपति में ++ काम करते हैं - आप मूल्य को अद्यतन करने नहीं कर रहे हैं (या कम से कम यह नहीं होना चाहिए), इसलिए जीसीसी से चेतावनी। [: पी अन्य प्रतिक्रिया से, धन्यवाद]: सही कोड
const_cast<myType*&>(myMember) = new myType();
या है
const_cast<ThisType*>(this)->myMember = new myType();
बनाना यह परिवर्तनशील प्रभावी रूप से मतलब है कि आप जो आम तौर पर है कि तुम क्या होना चाहिए const
सदस्य कार्यों में निहित const_cast
रों मिलता है, जब आप अपने आप को एस this
पर लोड करते हैं तो आप की ओर बढ़ते रहें। इसके अलावा अन्य 'उत्परिवर्तनीय उपयोग करने के लिए दुष्प्रभाव' नहीं हैं।
जैसा कि आप इस प्रश्न को घेरते हुए जोरदार बहस से देख सकते हैं, mutable
का बहुत उपयोग नहीं है और const_cast
के बहुत सारे उपयोग निश्चित रूप से आपके कोड में खराब गंध के लक्षण हो सकते हैं। एक वैचारिक दृष्टिकोण से, स्थिरता कास्टिंग या mutable
का उपयोग करके बहुत अधिक प्रभाव हो सकते हैं। कुछ मामलों में, सही काम करने के लिए विधि को गैर-कॉन्स में बदलने के लिए हो सकता है, यानी, इस तथ्य के स्वामित्व में कि यह राज्य को संशोधित कर रहा है।
यह सब स्थिरांक-शुद्धता कितना आपके संदर्भ में मामलों पर निर्भर करता है - आप न खत्म करने के लिए सिर्फ mutable
sprinking आसपास परी धूल की तरह सामान काम करने के लिए चाहते हैं, लेकिन mutable
उपयोग के लिए अभिप्रेत है, तो नमूदार के सदस्य नहीं है हिस्सा वस्तु की स्थिति। कॉन्स्ट-शुद्धता का सबसे कड़े दृश्य यह मान लेगा कि ऑब्जेक्ट की स्थिति का एक भी बिट संशोधित नहीं किया जा सकता है (उदाहरण के लिए, यदि आप उदाहरण में रोम में हैं तो यह महत्वपूर्ण हो सकता है ...) - उन मामलों में आप किसी भी स्थिरता को नहीं चाहते हैं खो जाना। अन्य मामलों में, आपके पास ऑब्जेक्ट के कहीं और बाहरी संग्रहीत कुछ बाहरी राज्य हो सकते हैं - उदाहरण के लिए, एक थ्रेड-विशिष्ट कैश जिसे यह उचित होने पर निर्णय लेने पर भी विचार किया जाना चाहिए।
स्रोत
2009-11-25 12:15:51
धन्यवाद। [न्यूनतम 15 वर्ण] –
मुझे लगता है कि यह काम करता है, यह संभवतः सबसे खराब समाधान है। यह सदस्य समारोह में एक कॉन्स-कास्ट में क्या होता है (एक अपरिवर्तनीय उदाहरण की आंतरिक स्थिति को बदलता है) पूरी तरह छुपाता है। "mutable" स्पष्ट होगा (या इंटरफेस का उपयोग कर)। –
कॉन्सनेस दूर कास्टिंग अपरिभाषित व्यवहार की ओर जाता है। अपने जोखिम पार इस्तेमाल करें। विधि को गैर स्थिर बनाने के लिए एक बेहतर समाधान होगा। –