क्या यह सच है कि const_cast संकलक को बताने का एक तरीका है "इसे रोकना बंद करें, इसे गैर-कॉन्स्ट पॉइंटर के रूप में देखें"? क्या कोई समस्या है जब const_cast का अनुवाद वास्तविक मशीन कोड में किया गया है?क्या const_cast कभी भी वास्तविक कोड उत्सर्जन का कारण बनता है?
उत्तर
निश्चित रूप से, ऐसे आर्किटेक्चर हो सकते हैं जहां एक कॉन्स्ट पॉइंटर का गैर-कॉन्स एक अलग प्रतिनिधित्व होता है, जिस स्थिति में कंपाइलर को कुछ कोड उत्सर्जित करना होगा। हालांकि, मुझे ऐसे किसी भी आर्किटेक्चर से अवगत नहीं है।
चालाक, लेकिन सत्य नहीं: कॉन्स्ट केवल विशेषता है, इसका मतलब यह नहीं है कि आप लिख नहीं सकते (म्यूटेबल सदस्यों पर विचार करें)। यदि आप एक आर्किटेक्चर की कल्पना कर रहे हैं जहां केवल पढ़ने-पढ़ने और पढ़ने-लिखने या लिखने-केवल पॉइंटर्स अलग हैं, तो कोड अभी भी लिखने के बजाय कलाकारों पर नहीं बनाया जाएगा। – Suma
मैंने जानबूझकर यह नहीं कहा था कि कंपाइलर को कुछ कोड उत्सर्जित करना होगा। –
कोई फर्क नहीं पड़ता। कॉन्स्ट_कास्ट वाउड पॉइंटर में काल्पनिक "केवल-पढ़ने वाला बिट" हटा देता है, जैसा एक कॉन्स्ट पॉइंटर के माध्यम से एक परिवर्तनीय सदस्य को लिखता है। उत्तरार्द्ध संकलक द्वारा 100% शुद्धता के साथ पता लगाया जा सकता है। – MSalters
नहीं, यह संकलन समय पर केवल कॉन्स विशेषता को हटा देता है।
const_cast सिर्फ एक विशेषता की स्थिरता को फेंक देता है और कुछ भी नहीं।
const
किसी प्रकार का प्रतिनिधित्व नहीं करता है, विशेष रूप से, T*
का प्रतिनिधित्व T const*
जैसा ही है।
पर विचार करें:
int i,
* const cpi = &i,
* const * pcpi = &cpi;
int const * const * pcpci = pcpi; // cpi is now int const*
एक ही समय में cpi
का प्रतिनिधित्व एक int*
और *pcpci
के माध्यम से एक int const*
प्रतिनिधित्व करता है।
pcpci
को प्रारंभ करने के लिए cpi
के प्रतिनिधित्व के लिए कोई रास्ता नहीं है।
बेशक, अगर पॉइंटर ऑब्जेक्ट्स में गैर-महत्वपूर्ण बिट्स हैं, तो कंपाइलर उन्हें यादृच्छिक रूप से फ़्लिप कर सकता है; विशेष रूप से, const_cast
एक सूचक के गैर-महत्वपूर्ण बिट्स को फ़्लिप कर सकता है, लेकिन कोई भी अंतर्निहित रूपांतरण भी हो सकता है। मुझे नहीं लगता कि यह मामला वास्तविक दुनिया में मौजूद है।
वही लागू होता है जब दो अलग-अलग बिट पैटर्न के परिणामस्वरूप एक ही पता मूल्य होता है (ऑफसेट होने पर बेस + ऑफसेट पर्याप्त होता है)।
- 1. क्या यह कोड मेमोरी रिसाव का कारण बनता है?
- 2. removeObjectAtIndex का कारण बनता है
- 3. एसआईजीएबीआरटी गलती का क्या कारण बनता है?
- 4. "#in35e <string>" को छोड़कर क्यों कभी-कभी संकलन विफलताओं का कारण बनता है?
- 5. Html.RenderAction का कारण बनता है
- 6. Entitymanager मेमोरी रिसाव का कारण बनता है?
- 7. समवर्ती जीसी कभी-कभी एक्जिक्यूशनइंजिनएक्सप्शन (प्रति एमएसडीएन) का कारण क्यों बनता है?
- 8. एलएलवीएम कोड पीढ़ी seg गलती का कारण बनता है?
- 9. TortoiseSVN: ग्रे चेकमार्क का क्या कारण बनता है?
- 10. Googlebot नेट System.Web.HttpException का कारण बनता है
- 11. CGColorRef क्रैश का कारण बनता है
- 12. क्या स्कोपगार्ड का उपयोग वास्तव में बेहतर कोड का कारण बनता है?
- 13. pthread_mutex_lock डेडलॉक का कारण बनता है
- 14. Android GLSurfaceView रिसाव का कारण बनता है?
- 15. WriteFile को ERROR_ACCESS_DENIED वापस करने का क्या कारण बनता है?
- 16. क्या डीएलएल कभी भी मशीन कोड में बदल जाता है?
- 17. File.WriteAllBytes का कारण बनता है त्रुटि
- 18. Android में MotionEvent.ACTION_CANCEL का क्या कारण बनता है?
- 19. क्या वीबी.नेट "अगर" ऑपरेटर मुक्केबाजी का कारण बनता है?
- 20. क्या आर स्क्रिप्ट को मारने का कारण बनता है?
- 21. क्यों अप्रचलित त्रुटि का कारण बनता है?
- 22. SQLite में जर्नल फ़ाइल बनाने का क्या कारण बनता है?
- 23. टूटी हुई पाइप त्रुटि का क्या कारण बनता है?
- 24. एसपीएफ़ मुद्दा: सॉफ्टफेल का क्या कारण बनता है?
- 25. क्या एसएसएल बहुत अधिक बैंडविड्थ का कारण बनता है?
- 26. क्या एएसएलआर डीएलएस की धीमी लोडिंग का कारण बनता है?
- 27. EventMachine :: कनेक्शन नॉटबाउंड का क्या कारण बनता है?
- 28. क्या HttpListener HTTP 503 त्रुटि का कारण बनता है?
- 29. आईओएस लिंकिंग त्रुटियों का क्या कारण बनता है?
- 30. पाइथन सेगमेंटेशन गलती का क्या कारण बनता है?
हाँ, यह सच है। – user51568