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