मैं C ++ से बात करूंगा, जहां यह अंतर सबसे अधिक प्रासंगिक है।
जैसा कि आप सही ढंग से ध्यान दें, अपरिवर्तनीय का मतलब है कि एक वस्तु अपने निर्माण के बाद बिल्कुल भी नहीं बदल सकती है। यह निर्माण निश्चित रूप से रनटाइम पर हो सकता है, अर्थात, एक const
वस्तु अनिवार्य रूप से एक संकलन-समय स्थिर नहीं है। C ++ में, एक ऑब्जेक्ट अपरिवर्तनीय है यदि (1) और या तो (2) या (3) मिलते हैं:
इसका कोई भी सदस्य घोषित नहीं है mutable
जो const
सदस्य कार्यों से उत्परिवर्तित हो
यह घोषित है const
const
सदस्य कार्य किसी भी सदस्य को म्यूट const_cast
करने के लिए const
योग्यता को हटाने के लिए उपयोग नहीं करते हैं
हालांकि, आप एक्सेस मॉडिफायर पर भी विचार कर सकते हैं: यदि कोई ऑपरेशन आंतरिक रूप से एक उदाहरण को उत्परिवर्तित करता है, लेकिन इसके सार्वजनिक इंटरफ़ेस के माध्यम से देखने योग्य उदाहरण की स्थिति पर कोई प्रभाव नहीं पड़ता है, तो ऑब्जेक्ट "तार्किक रूप से अपरिवर्तनीय" है।
तो C ++ अपरिवर्तनीय वस्तुओं को बनाने के लिए आवश्यक उपकरण प्रदान करता है, लेकिन C ++ में सब कुछ की तरह, उपकरण केवल न्यूनतम रूप से पर्याप्त हैं, और वास्तव में उपयोग करने के लिए परिश्रम की आवश्यकता होती है। एक उदाहरण की स्थिति आवश्यक रूप से उदाहरण के सदस्य चर तक ही सीमित नहीं है- क्योंकि C ++ रेफरेन्शियल ट्रांसपेरेंसी को लागू करने का एक तरीका प्रदान नहीं करता है, इसमें वैश्विक या क्लास स्टेट भी शामिल हो सकते हैं।
const
C ++ में एक और फ़ंक्शन भी है: संदर्भ और बिंदुओं को अर्हता प्राप्त करने के लिए। एक const
संदर्भ एक गैर- const
वस्तु को संदर्भित कर सकता है । const_cast
किसी ऑब्जेक्ट को किसी const
संदर्भ के माध्यम से म्यूट करने के लिए उपयोग करना कानूनी (हालांकि आम तौर पर आवश्यक या उचित नहीं है) , यदि और केवल तभी उस वस्तु को गैर घोषित किया जाता है const
:
int i = 4; // Non-const object.
const int* p = &i; // const pointer.
*const_cast<int*>(p) = 5; // Legal.
और निश्चित रूप से यह एक const
वस्तु को उत्परिवर्तित करने के लिए अपरिभाषित व्यवहार है :
const int i = 4; // const object.
const int* p = &i; // const pointer.
*const_cast<int*>(p) = 5; // Illegal.
const
हर भाषा में मौजूद नहीं है, और परिवर्तनशीलता और अपरिवर्तनीयता हर भाषा में मौजूद नहीं है इसलिए इस भाषा को एगोनिस्टिक बनाना लागू नहीं है। यह भाषा विशिष्ट है जहां ये अवधारणाएं लागू होती हैं।