यहां हम देखेंगे कि static_cast<> और सामान्य C स्टाइल कास्ट में क्या अंतर हैं।
सामान्य कास्ट जैसे (int)x सी स्टाइल टाइपकास्टिंग है जहां static_cast
यह static_cast<>() कंपाइल टाइम चेकिंग सुविधा देता है, लेकिन C स्टाइल कास्टिंग इसका समर्थन नहीं करता है। यह static_cast<>() किसी C++ कोड के अंदर कहीं भी देखा जा सकता है। और इस C++ कास्ट का उपयोग करके इंटेंस को बहुत बेहतर तरीके से व्यक्त किया जाता है।
C जैसे कास्ट में कभी-कभी हम किसी अन्य प्रकार के डेटा को इंगित करने के लिए कुछ प्रकार के पॉइंटर डाल सकते हैं।
जैसे एक पूर्णांक सूचक भी वर्ण प्रकार के डेटा को इंगित कर सकता है, क्योंकि वे काफी समान हैं, केवल अंतर वर्ण में 1-बाइट है, पूर्णांक में 4-बाइट है। C++ में static_cast<>() C की तरह कास्टिंग की तुलना में अधिक सख्त है। यह केवल संगत प्रकारों के बीच परिवर्तित होता है।
उदाहरण
char c = 65; //1-byte data. ASCII of ‘A’ int *ptr = (int*)&c; //4-byte
चूंकि 4-बाइट पॉइंटर में, यह आवंटित मेमोरी के 1-बाइट की ओर इशारा कर रहा है, यह रनटाइम त्रुटि उत्पन्न कर सकता है या कुछ आसन्न मेमोरी को अधिलेखित कर देगा।
C++ में static_cast<>() कंपाइलर को यह जांचने की अनुमति देगा कि पॉइंटर और डेटा एक ही प्रकार के हैं या नहीं। यदि नहीं, तो यह संकलन के दौरान गलत पॉइंटर असाइनमेंट अपवाद उठाएगा।
char c = 65; //1-byte data. ASCII of ‘A’ int *ptr = static_cast<int>(&c);. का ASCII
यह संकलन समय त्रुटि उत्पन्न करेगा।