मैं reinterpret_cast
बनाम की प्रयोज्यता से थोड़ा भ्रमित हूं static_cast
। जब मैंने सामान्य नियमों को पढ़ा है, तब से स्टेटिक कास्ट का उपयोग किया जाता है जब संकलन समय पर व्याख्या की जा सकती है इसलिए शब्द static
। यह वह C है जो C ++ कंपाइलर आंतरिक रूप से निहित कास्ट के लिए भी उपयोग करता है।
reinterpret_cast
s दो परिदृश्यों में लागू होते हैं:
- पूर्णांक प्रकारों को सूचक प्रकारों में परिवर्तित करें और इसके विपरीत
- एक सूचक प्रकार को दूसरे में बदलें। मुझे जो सामान्य विचार मिलता है, वह अप्रमाणिक है और इसे टाला जाना चाहिए।
जहाँ मैं थोड़ा उलझन में हूँ एक उपयोग है जिसकी मुझे आवश्यकता है, मैं C ++ को C से कॉल कर रहा हूँ और C कोड को C ++ ऑब्जेक्ट पर रखने की आवश्यकता है, इसलिए मूल रूप से यह एक है void*
। void *
वर्ग और वर्ग प्रकार के बीच कनवर्ट करने के लिए किस कास्ट का उपयोग किया जाना चाहिए ?
मैंने दोनों का उपयोग देखा है static_cast
और reinterpret_cast
? यद्यपि मैं जो पढ़ रहा हूं, उससे यह प्रतीत होता है static
कि बेहतर है क्योंकि कलाकारों का संकलन समय पर हो सकता है? हालांकि यह reinterpret_cast
एक पॉइंटर प्रकार से दूसरे में बदलने के लिए उपयोग करने के लिए कहता है ?
reinterpret_cast
रन टाइम पर नहीं होता है। वे दोनों संकलन-समय कथन हैं। से en.cppreference.com/w/cpp/language/reinterpret_cast : "विपरीत static_cast, लेकिन const_cast की तरह, reinterpret_cast अभिव्यक्ति किसी भी सीपीयू निर्देशों के संकलन नहीं है यह पूरी तरह एक संकलक निर्देश जो संकलक का निर्देश बिट्स के अनुक्रम के इलाज के लिए है। अभिव्यक्ति के (ऑब्जेक्ट प्रतिनिधित्व) के रूप में अगर यह new_type था। "