वे दोनों सही हैं।
एक कॉन्स सदस्य फ़ंक्शन ऑब्जेक्ट के राज्य को परिवर्तित नहीं कर सकता है।
- इसका मतलब है कि यह सभी सदस्य चर को पढ़ सकता है (लेकिन संशोधित नहीं)।
- इसका यह भी अर्थ है कि यह केवल अन्य कॉन्स्ट सदस्य फ़ंक्शन
अन्य विधियों को ऑब्जेक्ट की स्थिति को बदलने की गारंटी नहीं देता है।
ऊपर जेम्स भी उत्परिवर्ती सदस्यों का उल्लेख करता है।
तो मुझे यहां उनको भी कवर करना चाहिए।
एक परिवर्तनीय सदस्य चर एक चर है जो वस्तु की स्थिति का हिस्सा नहीं है (संकलक इसे वस्तुओं की स्थिति का हिस्सा नहीं मानता)। आपको इसका इलाज भी करना चाहिए। ऑब्जेक्ट के बारे में राज्य की जानकारी रखने वाले किसी भी सदस्य चर को परिवर्तनीय चिह्नित किया जाना चाहिए। आपको केवल अस्थायी जानकारी रखने के लिए इसका उपयोग करना चाहिए जिसे ऑब्जेक्ट्स राज्य से फिर से बनाया जा सकता है।
एक साधारण उदाहरण दिनांक-समय वस्तु है। जहां ऑब्जेक्ट में एक विधि है जो डेटा/समय को एक पठनीय स्ट्रिंग प्रारूप में परिवर्तित करती है। इस स्ट्रिंग को म्यूटेबल सदस्य में दक्षता के लिए ऑब्जेक्ट में कैश किया जा सकता है (ताकि आपको बार-बार स्ट्रिंग बनाने की आवश्यकता न हो)। लेकिन स्ट्रिंग ऑब्जेक्ट स्टेट का हिस्सा नहीं है (क्योंकि इसे अन्य सदस्यों से बनाया जा सकता है)।
इसके अलावा जेम्स const_cast का उपयोग करके स्थिरता कास्टिंग करने का उल्लेख करता है।
बहुत विशेष परिस्थितियों के अलावा जहां आप ऑब्जेक्ट जानते हैं, ऐसा नहीं कर सकता है इसे सार्वभौमिक रूप से एक बुरा विचार माना जाता है। क्योंकि यह सीधे अपरिभाषित व्यवहार की ओर जाता है। यदि आपको खुद को स्थिरता को दूर करने की आवश्यकता है तो आपके कार्यक्रम में डिजाइन में कुछ गड़बड़ हुई है।
असल में मैं केवल एक ऐसी स्थिति के बारे में सोच सकता हूं जहां यह सामान्य रूप से होता है। और फिर मैं यह सुनिश्चित करने के लिए कोड को प्रतिबद्ध करने के लिए तैयार नहीं हूं कि मैं मूर्खतापूर्ण न दिखूं।
स्रोत
2009-12-27 19:43:10
आपकी सी ++ पुस्तक क्या कहती है? –
यह साइट ** ** मेरी सी ++ पुस्तक है! –
वे दोनों सही हैं। एक डिग्री (नीचे देखें)। –