2010-02-04 11 views
5

सी ++ में मैं निम्न कर सकते हैं किसी भी डेटा प्रकार के लिए: जब मैं void* को Type* आवंटितकिस प्रकार का कास्ट टाइप * से शून्य * है?

Type* typedPointer = obtain(); 
void* voidPointer = typedPointer; 

जो डाली किया जाता है? क्या यह

Type* typedPointer = obtain(); 
void* voidPointer = reinterpret_cast<void*>(typedPointer); 

या यह कोई अन्य कलाकार है?

उत्तर

4

यह एक मानक सूचक रूपांतरण है। चूंकि यह एक मानक रूपांतरण है, इसलिए इसे किसी भी स्पष्ट कलाकार की आवश्यकता नहीं है।

यदि आप एक स्पष्ट कलाकार के साथ उस रूपांतरण के व्यवहार को पुन: उत्पन्न करना चाहते हैं, तो यह static_cast होगा, reinterpret_cast नहीं।

5.2.9/2, static_cast में दिए गए static_cast की परिभाषा को सभी रूपांतरणों को निष्पादित कर सकते हैं जो पूरी तरह से किए जा सकते हैं।

2

यह वही कलाकार है। किसी भी सूचक को शून्य-सूचक में डाला जा सकता है।

4

Type* से void* लिए अंतर्निहित रूपांतरण उपलब्ध है। कोड के इरादे को स्पष्ट करने के लिए आप static_cast का उपयोग कर सकते हैं। रिवर्स के लिए आप की आवश्यकता होती है reinterpret_cast

संपादित: उलटा भी static_cast के लिए टिप्पणी के अनुसार इस्तेमाल किया जा सकता। कोड का नमूना टुकड़ा आजमाया और यह वास्तव में संकलित करता है। यह नहीं पता था कि हमेशा एक शून्य * से कास्ट करने के लिए reinterpret_cast का उपयोग किया जाता है।

4

यह एक कलाकार नहीं है, यह निहित रूपांतरण है। परिभाषा द्वारा स्पष्ट हैं। यह अब से अधिक कास्ट नहीं है:

char c = 'a'; 
int i = c; 

है।

संबंधित मुद्दे