सिंटेक्स त्रुटियों को गैर-सामना करना, आपनहीं कर सकतेएक गैर-बहुलक प्रकार। static_cast
वह कास्ट है जिसका उपयोग आप इस मामले में करेंगे, अगर आपको पता है कि यह वास्तव में लक्ष्य प्रकार का एक वस्तु है।
कारण: static_cast
मूल रूप से कंपाइलर संकलन समय पर एक जांच करता है "क्या इनपुट आउटपुट में डाला जा सकता है?" इसका उपयोग उन मामलों के लिए किया जा सकता है जहां आप पॉइंटर्स (या संदर्भ) के उत्तराधिकारी पदानुक्रम को ऊपर या नीचे कास्टिंग कर रहे हैं। लेकिन चेक केवल संकलन समय पर है, और संकलक आपको लगता है कि आप क्या कर रहे हैं।
dynamic_cast
केवल पॉइंटर या संदर्भ कलाकार के मामले में उपयोग किया जा सकता है, और संकलन समय जांच के अतिरिक्त, यह एक अतिरिक्त रन टाइम जांचता है कि कास्ट कानूनी है। यह आवश्यक है कि प्रश्न में वर्ग में कम से कम 1 आभासी विधि हो, जो इस अतिरिक्त जांच को करने के लिए संकलक (यदि यह आरटीटीआई का समर्थन करता है) की अनुमति देता है। हालांकि, यदि प्रश्न में टाइप में कोई वर्चुअल विधियां नहीं हैं, तो इसका उपयोग नहीं किया जा सकता है।
सबसे आसान मामला, और संभवतः सार्थक यदि आप इस तरह के पॉइंटर्स पास कर रहे हैं, तो बेस क्लास के विनाशक वर्चुअल बनाने पर विचार करना है। गतिशील कलाकारों का उपयोग करने की अनुमति देने के अलावा, यह बेस क्लास पॉइंटर हटा दिए जाने पर उचित विनाशकों को भी बुलाया जा सकता है।
स्रोत
2011-12-12 04:30:55
'ए' एक सूचक नहीं है। क्या यह आपके कोड में है? – littleadv
क्षमा करें, वास्तव में एक सूचक है। – wbarksdale
और त्रुटि संकलन समय या रन टाइम है? यदि रन टाइम, तो आईएमएचओ इसकी अपेक्षित व्यवहार करता है। – littleadv