Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ में (int)x के बजाय static_cast(x) का उपयोग क्यों करें?


The (int)x C स्टाइल टाइपकास्टिंग है जहां static_cast(x) का उपयोग C++ में किया जाता है। यह static_cast<>() कंपाइल टाइम चेकिंग सुविधा देता है, लेकिन C स्टाइल कास्टिंग इसका समर्थन नहीं करता है। यह static_cast<>() किसी 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

यह संकलन समय त्रुटि उत्पन्न करेगा।


  1. सी ++ में मैट्रिक्स का निर्धारक?

    मैट्रिक्स के निर्धारक की गणना केवल एक वर्ग मैट्रिक्स के लिए की जा सकती है, पहली पंक्ति कोफ़ैक्टर को संबंधित कॉफ़ैक्टर के निर्धारक द्वारा गुणा करके और अंतिम परिणाम प्राप्त करने के लिए वैकल्पिक संकेतों के साथ जोड़कर। $$A =\begin{bmatrix}a &b &c\\d &e &f \\g &h &i \\ \end{bmatrix}|A| =a(ei-fh)-b(di-gf

  1. C++ में रेंज एडिशन

    मान लीजिए कि हमारे पास आकार n की एक सरणी है और इसे 0 के साथ आरंभीकृत किया गया है और हमारे पास एक मान k भी है, हम k अद्यतन संचालन करेंगे। प्रत्येक ऑपरेशन को ट्रिपलेट के रूप में दर्शाया जाएगा:[स्टार्टइंडेक्स, एंडइंडेक्स, इंक] जो सबरे ए के प्रत्येक तत्व को बढ़ाता है [स्टार्टइंडेक्स ... एंडइंडेक्स] (स्ट

  1. C++ . में रेखा परावर्तन

    मान लीजिए कि हमारे पास 2D तल पर n बिंदु हैं, हमें यह जांचना है कि क्या y-अक्ष के समानांतर कोई रेखा है जो दिए गए बिंदुओं को सममित रूप से दर्शाती है, दूसरे शब्दों में, जांचें कि क्या कोई ऐसी रेखा मौजूद है जो दी गई रेखा पर सभी बिंदुओं को प्रतिबिंबित करने के बाद मूल बिंदुओं का सेट वही होता है जो प्रतिबि