एसओ सी ++ एफएक्यू When should static_cast, dynamic_cast and reinterpret_cast be used? का जिक्र करते हुए।const_cast बनाम reinterpret_cast
const_cast का उपयोग एक चर को हटाने या जोड़ने के लिए किया जाता है और यह स्थिरता को हटाने के लिए एकमात्र विश्वसनीय, परिभाषित और कानूनी तरीका है। reinterpret_cast का उपयोग किसी प्रकार की व्याख्या को बदलने के लिए किया जाता है।
मैं एक उचित तरीके से समझता हूं, क्यों एक कॉन्स्ट चर को केवल const_cast का उपयोग करके गैर-कॉन्स्ट में डाला जाना चाहिए, लेकिन मैं स्थिरता जोड़ने के लिए const_cast के बजाय reinterpret_cast का उपयोग करके समस्याओं का उचित औचित्य नहीं समझ सकता।
मैं समझता हूं कि स्थिरता जोड़ने के लिए reinterpret_cast का उपयोग करना भी नहीं है, लेकिन यह स्थिरता जोड़ने के लिए reinterpret_cast का उपयोग करने के लिए एक यूबी या संभावित समय बम होगा?
कारण मैं यहाँ उलझन में था बयान की वजह से है
मोटे तौर पर, केवल गारंटी आप reinterpret_cast के साथ मिलता है कि अगर आप मूल प्रकार पर वापस परिणाम डाली, आप सटीक मिल जाएगा एक ही मूल्य
तो अगर मैं constness reinterpret_cast का उपयोग कर और यदि आप परिणाम वापस मूल प्रकार के reinterpret_cast, इसे वापस मूल प्रकार के परिणाम चाहिए और यूबी नहीं होना चाहिए, लेकिन यह है कि तथ्य यह है कि एक ही const_cast का उपयोग करना चाहिए का उल्लंघन करती है जोड़ने constness दूर करने के लिए
एक अलग नोट पर, मानक की गारंटी देता है आप constness का उपयोग कर पुनर्व्याख्या मामले
5.2.10 पुनर्व्याख्या डाली (7) ...... जब प्रकार का एक prvalue वी जोड़ सकते हैं कि "पॉइंटर टू टी 1" को "पॉइंटर से सीवी टी 2" में परिवर्तित किया गया है, परिणामहैstatic_cast (static_cast (v)) अगर दोनों T1 और टी 2 मानक लेआउट प्रकार (3.9) और टी 2 के संरेखण आवश्यकताएँ हैं कोई टी 1 के से अधिक सख्त हैं ........
@clossvoters: क्या आप कृपया मुझे डुप्लिकेट प्रश्न का संदर्भ दे सकते हैं जो इसका उत्तर देता है? – Abhijit
'const_cast' में' अस्थिर 'के अतिरिक्त/हटाने को भी शामिल किया गया है। –
@ माइकडे सिमोन: हां निश्चित रूप से, लेकिन मेरा वर्तमान फोकस केवल स्थिरता है – Abhijit