const
और immutable
डी में क्वालीफायर टाइप करने के बीच क्या अंतर है?डी में कॉन्स और अपरिवर्तनीय के बीच क्या अंतर है?
उत्तर
कुछ है कि const
कि संदर्भ के माध्यम से उत्परिवर्तित नहीं किया जा सकता लेकिन द्वारा उत्परिवर्तित किया जा सकता है एक ही डेटा के एक परिवर्तनीय संदर्भ। immutable
पर कुछ ऐसा किसी भी उस डेटा के संदर्भ में उत्परिवर्तित नहीं किया जा सकता है। तो, अगर आप
const C c = foo();
तो आप जानते हैं कि आप वस्तु c
के माध्यम से c
से जाना जाता उत्परिवर्तित नहीं सकते हैं, लेकिन वस्तु को अन्य संदर्भ c
से जाना जाता अपने कोड में मौजूद हो सकता है, और अगर वे परिवर्तनशील हैं , वे इसे बदल सकते हैं और इसलिए c
देख सकते हैं। लेकिन अगर आप
immutable C c = foo();
तो आप जानते हैं कि यह वस्तु को बदलने के लिए c
से संबोधित किया जाता के लिए संभव नहीं है। एक बार immutable
ऑब्जेक्ट का निर्माण हो जाने के बाद, इसे रद्द करने के लिए अवैध है, और जब तक आप कास्टिंग के माध्यम से टाइप सिस्टम को विचलित नहीं करते हैं, तो immutable
ऑब्जेक्ट के लिए एक म्यूटेबल संदर्भ होना संभव नहीं है। और immutable
ऑब्जेक्ट्स को केवल पढ़ने योग्य स्मृति में रखा जा सकता है यदि संकलक चुनता है, तो आप वास्तव में segfaults प्राप्त कर सकते हैं और जैसे कि आपने कभी immutable
को निकालने और ऑब्जेक्ट को म्यूट करने का प्रयास किया है। const
के लिए यह वही है, क्योंकि const
संदर्भ वास्तव में immutable
ऑब्जेक्ट को संदर्भित कर सकता है। या तो const
या immutable
को कास्ट करना और उसके बाद उस म्यूटेबल ऑब्जेक्ट को म्यूट करना अपरिभाषित व्यवहार है और मूल रूप से कभी नहीं किया जाना चाहिए।
और immutable
ऑब्जेक्ट को किसी अन्य संदर्भ द्वारा कभी भी उत्परिवर्तित नहीं किया जा सकता है, immutable
ऑब्जेक्ट को एकाधिक धागे से पढ़ना पूरी तरह से थ्रेड-सुरक्षित है। इसलिए, immutable
ऑब्जेक्ट्स को थ्रेड में पूरी तरह से साझा किया जाता है, जबकि अन्य सभी जिन्हें shared
के साथ स्पष्ट रूप से चिह्नित नहीं किया जाता है, को थ्रेड-लोकल माना जाता है। immutable
const
की तुलना में कंपाइलर को बेहतर अनुकूलन अवसर भी प्रदान करता है, क्योंकि यह कभी भी बदलने की गारंटी नहीं देता है, जबकि const
ऑब्जेक्ट उसी डेटा के किसी अन्य संदर्भ के माध्यम से बदल सकता है।
मूल्य प्रकारों के लिए, const
और immutable
(क्योंकि आपके पास गैर-परिवर्तनीय मान प्रकारों के लिए परिवर्तनीय संदर्भ नहीं हो सकते हैं) के बीच वास्तव में बहुत अंतर नहीं है, लेकिन संदर्भ प्रकारों के लिए, एक महत्वपूर्ण अंतर है।
एक बहुत ही निर्देशक उत्तर के लिए धन्यवाद। डी डेवलपर्स आमतौर पर मूल्य प्रकारों के लिए कौन सा उपयोग करते हैं? – user763305
@ user763305 इस समय, मैं किसी एक तकनीकी कारण के बारे में सोच नहीं सकता कि एक दूसरे को पसंद किया जाए, और मुझे नहीं पता कि औसत डी डेवलपर क्या उपयोग करना चुनता है। व्यक्तिगत रूप से, मैं 'अपरिवर्तनीय' चुनता हूं, क्योंकि तब यह स्पष्ट होता है कि इसे बिना किसी मूल्य के यह उत्परिवर्तित किया जा सकता है कि यह एक मूल्य प्रकार है, लेकिन यह केवल व्यक्तिगत वरीयता है। –
लेकिन निश्चित रूप से 'स्ट्रिंग' के चरित्र से 'अपरिवर्तनीय' को कास्ट करना ठीक है? –
वे पाते हैं कि immutable
डेटा में अलग हैं, वास्तव में केवल पढ़ने के लिए वर्गों स्मृति के में रखा जा सकता था, और इसलिए, किसी भी प्रयास को डेटा यह असफल हो जायेगी संशोधित करने के लिए।
कुछ घोषित const
(और नहीं अपरिवर्तनीय) दूसरी तरफ आर/डब्ल्यू अनुभाग और मूल्य में मौजूद है अभी भी यह करने के लिए एक अलग गैर स्थिरांक संदर्भ के माध्यम से बदला जा सकता है।
तो, इस तरह के मामले में "कॉन्स्ट-नेस" को छोड़ दिया जा सकता है, जबकि अपरिवर्तनीयता नहीं हो सकती है।
यह बिल्कुल सही नहीं है क्योंकि 'कॉन्स्ट' डेटा वास्तव में' अपरिवर्तनीय 'हो सकता है। तो 'const' डेटा केवल पढ़ने योग्य खंडों में भी हो सकता है क्योंकि 'अपरिवर्तनीय' डेटा 'const'' पर स्पष्ट रूप से रहता है। – yaz
@yaz सहमत। मैं इस मामले में अस्थिर होने के बारे में बात नहीं कर रहा था। –
जब आप const
के रूप में कुछ की घोषणा, तुमसे वादा करता हूँ कि आप इसे संशोधित नहीं करेगा। कुछ immutable
के रूप में घोषित किया जाता है, आप का वादा किया हो कि इसे कहीं और संशोधित नहीं किया जाएगा (और बेशक, आप इसे या तो संशोधित नहीं कर सकते)
const
प्रकार की एक चर घोषित एक परिवर्तनीय मूल्य या अपरिवर्तनीय मान स्वीकार कर सकते हैं। यह परिभाषा संदर्भित प्रकारों जैसे सरणी और वस्तुओं या पॉइंटर्स के लिए प्रासंगिक है। यह आमतौर पर फ़ंक्शन तर्कों के लिए उपयोग किया जाएगा। तो डी कॉन्स्ट में म्यूटेबल और अपरिवर्तनीय मूल्यों के लिए वाइल्डकार्ड विशेषता का एक प्रकार है।
यह उन मूल्यों के लिए अधिक समझ नहीं है जो एक char, int या float जैसे असाइनमेंट के साथ प्रतिलिपि बनाई गई हैं।
सी और सी ++ में पाए गए एक से कॉन्स्ट और अपरिवर्तनीय अवधारणा बहुत अलग है। मैं इससे बहुत उलझन में था।
- 1. सी # में कॉन्स और स्टेटिक के बीच क्या अंतर है?
- 2. के बीच क्या अंतर है: डी और: डी :?
- 3. परिवर्तनीय और अपरिवर्तनीय के बीच क्या अंतर है?
- 4. स्थिर स्थिरांक और कॉन्स के बीच क्या अंतर है?
- 5. कॉन्स के बीच अंतर। सूचक और संदर्भ?
- 6. एक कॉन्स पॉइंटर (कॉन्स के लिए पॉइंटर नहीं) और संदर्भ के बीच कार्यात्मक अंतर क्या है?
- 7. क्या बीच का अंतर है परिवर्तनशील और अपरिवर्तनीय
- 8. एसआई और डी रजिस्टरों के बीच व्यावहारिक अंतर क्या है?
- 9. क्या "स्थिर एनएसआईएनटेगर कॉन्स" और "स्थिर कॉन्स एनएसआईएनटेगर" के बीच कोई अंतर है?
- 10. क्या डी में अपरिवर्तनीय डेटा "जला" है?
- 11. फ़ंक्शन (डी) और फ़ंक्शन (डी, i) के बीच अंतर?
- 12. के बीच अंतर: डी [गिनती] और डी [गिनती]
- 13. जावा में परमाणु इंटीजर और सामान्य अपरिवर्तनीय पूर्णांक वर्ग के बीच क्या अंतर है?
- 14. जंग में अपरिवर्तनीय और स्थिर चर के बीच क्या अंतर है?
- 15. GlBufferStorage और glBufferData के बीच क्या अंतर है?
- 16. प्रतिक्रिया-रेडक्स: state.setIn() और state.set() के बीच क्या अंतर है?
- 17. एफ (कॉन्स स्ट्रिंग और) और एफ (कॉन्स स्ट्रिंग) के बीच कोई अंतर?
- 18. केरास मैक्सपूलिंग 1 डी और ग्लोबलमैक्सपूलिंग 1 डी फ़ंक्शंस के बीच क्या अंतर है?
- 19. कक्षा के अपरिपक्व कपलिंग और अपरिवर्तनीय युग्मन के बीच क्या अंतर है?
- 20. () बनाम [] बनाम {} के बीच क्या अंतर है?
- 21. क्या $ @ और "$ @" के बीच कोई अंतर है?
- 22. "const" और "val" के बीच क्या अंतर है?
- 23. # {} $ {} और% {} के बीच क्या अंतर है?
- 24. * और * के बीच क्या अंतर है?
- 25. के बीच क्या अंतर है:। और: आर !?
- 26. [अपरिभाषित] और [,] के बीच क्या अंतर है?
- 27. वेरिलोग के बीच क्या अंतर है! और ~?
- 28. `&` और `ref` के बीच क्या अंतर है?
- 29. $ और $$ के बीच क्या अंतर है?
- 30. भिन्नता और '-' के बीच क्या अंतर है?
आप इस लिंक पर अपरिवर्तनीयता के बारे में पढ़ सकते हैं http://ddili.org/ders/d.en/const_and_immutable.html – yaz