मुझे यकीन नहीं है कि इससे पहले पूछा गया है, लेकिन मुझे विश्वास होना चाहिए था। प्रश्न की शुरुआत के लिए सरल रेखा पर विचार करें:static_cast कैसे int int को डाला जा सकता है लेकिन reinterpret_cast नहीं?
int a ;
char b = reinterpret_cast<char> (a);
मैं समझता हूँ reinterpret_cast
प्रकार y के रूप में के प्रकार के एक्स बिट्स पैटर्न की व्याख्या, ofcouse यह आकार बेमेल की वजह से काम नहीं करना चाहिए और वास्तव में ऐसा नहीं है।
int a ;
char b = static_cast<char> (a);
यह काम करता है:
अब यह एक और कोड पर विचार! । अब मेरा सवाल यह है कि यह कैसे काम कर सकता है? मेरा मतलब है कि कंपाइलर बिट्स को बंद करता है? । मुझे यकीन है कि sizeof(char) < sizeof(int)
है। यदि वह, reinterpret_cast
भी एक ही तकनीक से काम करना चाहिए?
* "... और' reinterpret_cast' ऐसा नहीं करता "*। कल्पना का कौन सा हिस्सा कहता है? – Nawaz
@ नवाज, वह हिस्सा जो 'reinterpret_cast' द्वारा अनुमत रूपांतरणों को परिभाषित करता है, जाहिर है, आप इसे कहने की अपेक्षा कहां से कहां रखते हैं? [expr.reinterpret.cast] "रूपांतरण जो 'reinterpret_cast' का उपयोग करके स्पष्ट रूप से निष्पादित किए जा सकते हैं नीचे सूचीबद्ध हैं। ** नहीं अन्य रूपांतरण' reinterpret_cast' का उपयोग करके स्पष्ट रूप से किया जा सकता है। **" –
इसके नाम की प्रतीत होने वाली चौड़ाई के बावजूद, ' reinterpret_cast' काफी सीमित है। जैसा कि @ जोनाथन वाकई बताते हैं, वहां कुछ चीजें हैं जो यह कर सकती हैं (मूल रूप से पॉइंटर्स और संदर्भों से संबंधित चीजें) और कुछ भी अनुमति नहीं है। 5.2.10 [expr.reinterpret.cast]। सी-स्टाइल कास्ट की तरह बिल्कुल नहीं ... –