एक कास्ट आम तौर पर कास्ट के प्रकार पर निर्भर करता है। इन सभी कास्ट के लिए वैध उपयोग हैं, लेकिन कुछ दूसरों की तुलना में बदतर हैं।
const_cast
const
नेस को दूर करने के लिए उपयोग किया जाता है (क्योंकि इसे जोड़ने के लिए इसे कास्ट की आवश्यकता नहीं होती है)। आदर्श रूप में, इसका कभी भी उपयोग नहीं किया जाना चाहिए। यह अनिर्धारित व्यवहार का आह्वान करना आसान बनाता है (मूल रूप से const
नामित ऑब्जेक्ट को बदलने का प्रयास कर रहा है), और किसी भी मामले में const
-प्रोग्राम की सुधार को तोड़ देता है। कभी-कभी आवश्यक होता है जब एपीआई के साथ इंटरफेसिंग करते हैं जो const
-सही नहीं हैं, उदाहरण के लिए char *
के लिए पूछ सकते हैं, जब वे इसे const char *
के रूप में पेश करने जा रहे हैं, लेकिन चूंकि आपको एपीआई नहीं लिखना चाहिए, इस तरह यह एक संकेत है कि आप एक वास्तव में पुरानी एपीआई या किसी को खराब कर रहे हैं।
reinterpret_cast
हमेशा मंच-निर्भर होने जा रहा है, और इसलिए पोर्टेबल कोड में सबसे अच्छा संदिग्ध है। इसके अलावा, जब तक आप वस्तुओं की भौतिक संरचना पर निम्न स्तर के संचालन नहीं कर रहे हैं, यह अर्थ को संरक्षित नहीं करता है। सी और सी ++ में, एक प्रकार का अर्थपूर्ण होना चाहिए। एक int
एक संख्या है जिसका अर्थ कुछ है; एक int
जो मूल रूप से char
एस का संयोजन है, वास्तव में कुछ भी मतलब नहीं है।
dynamic_cast
आमतौर पर डाउनकास्टिंग के लिए उपयोग किया जाता है; जैसे Base *
से Derived *
तक, यह साबित करने के साथ कि यह या तो यह काम करता है या यह 0 देता है। यह एक प्रकार के टैग पर switch
कथन के रूप में ओओ को बहुत अधिक करता है: यह कोड को परिभाषित करता है जो परिभाषित करता है कि कक्षा परिभाषा से कक्षा क्या है । यह अन्य कोड के साथ कक्षा परिभाषाओं को जोड़ता है और संभावित रखरखाव भार बढ़ाता है।
static_cast
डेटा रूपांतरण, इस तरह के और void *
से रूपांतरण के रूप में है कि आम तौर सही होने के लिए जाना जाता है के लिए प्रयोग किया जाता है, भी जाना जाता है सुरक्षित सूचक, वर्ग पदानुक्रम के भीतर डाले बात की इस प्रकार की। इसके बारे में सबसे बुरी बात यह है कि यह कुछ हद तक टाइप सिस्टम को घटा देता है। सी पुस्तकालयों, या मानक पुस्तकालय के सी भाग के साथ इंटरफेसिंग करते समय इसकी आवश्यकता होने की संभावना है, void *
अक्सर सी कार्यों में उपयोग किया जाता है।
सामान्य रूप से, अच्छी तरह से डिज़ाइन और अच्छी तरह से लिखित सी ++ कोड उपरोक्त उपयोग मामलों से बच जाएगा, कुछ मामलों में क्योंकि कास्ट का एकमात्र उपयोग संभावित रूप से खतरनाक चीजें करना है, और अन्य मामलों में क्योंकि इस तरह के कोड से बचने के लिए ऐसे रूपांतरणों की आवश्यकता है। सी ++ टाइप सिस्टम को आम तौर पर बनाए रखने के लिए एक अच्छी चीज के रूप में देखा जाता है, और इसे विचलित करता है।
मैं यहां तीर्थतुथ की अंतिम टिप्पणी से सहमत हूं, सिर्फ इसलिए कि आपके पास एक स्पष्ट कलाकार है, इसका मतलब यह नहीं है कि आपके पास खराब कोड है, लेकिन यदि आप वापस दूसरी पंक्ति को कास्टिंग और अग्रेषित कर रहे हैं तो आपको चीजों पर पुनर्विचार करना होगा। कास्टिंग एक वैध ऑपरेशन है लेकिन यह ऐसा कुछ है जिसे इस्तेमाल नहीं किया जाना चाहिए। –
निश्चित रूप से संकलन चेतावनियों और त्रुटियों को दूर करने के लिए कभी भी उपयोग नहीं किया जाता है! – Alan