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

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

(int)x C-स्टाइल टाइपकास्टिंग है जहां static_cast<int>(x) C++ में उपयोग किया जाता है। यह static_cast<>() कंपाइल-टाइम चेकिंग सुविधा देता है, लेकिन C-स्टाइल कास्टिंग इसका समर्थन नहीं करती। यह static_cast<>() C++ कोड में कहीं भी देखा जा सकता है। और इस C++ कास्ट का उपयोग करके इरादे बहुत बेहतर तरीके से व्यक्त किए जाते हैं।

C-स्टाइल कास्ट में कभी-कभी हम किसी टाइप पॉइंटर को किसी अन्य टाइप के डेटा पर इंगित करने के लिए कास्ट कर सकते हैं। जैसे एक इंटीजर पॉइंटर कैरेक्टर टाइप डेटा पर भी इंगित कर सकता है, क्योंकि वे काफी समान हैं, केवल अंतर यह है कि कैरेक्टर 1-बाइट का है, इंटीजर 4-बाइट्स का है। C++ में static_cast<>() C-स्टाइल कास्टिंग से अधिक सख्त है। यह केवल संगत प्रकारों के बीच रूपांतरण करता है।

उदाहरण कोड

char c = 65; //1-बाइट डेटा। 'A' का ASCII
int *ptr = (int*)&c; //4-बाइट

चूंकि 4-बाइट पॉइंटर में, यह 1-बाइट आवंटित मेमोरी की ओर इशारा कर रहा है, यह रनटाइम त्रुटि उत्पन्न कर सकता है या कुछ आसन्न मेमोरी को ओवरराइट कर सकता है।

C++ में static_cast<>() कंपाइलर को यह जांचने की अनुमति देगा कि पॉइंटर और डेटा समान प्रकार के हैं या नहीं। यदि नहीं तो यह संकलन के दौरान गलत पॉइंटर असाइनमेंट अपवाद उठाएगा।

char c = 65; //1-बाइट डेटा। 'A' का ASCII
int *ptr = static_cast<int>(&c);

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

  1. - C++ में मैट्रिक्स का सारणिक (Determinant of Matrix)

    एक मैट्रिक्स का सारणिक केवल वर्ग मैट्रिक्स के लिए गणना किया जा सकता है पहली पंक्ति के सहखंड (cofactor) को संबंधित सहखंड के सारणिक से गुणा करके और उन्हें वैकल्पिक चिह्नों के साथ जोड़कर अंतिम परिणाम प्राप्त किया जाता है। $$A = \begin{bmatrix}a & b & c\\d & e & f \\g & h & i \\ \end{bmatrix} |A| = a(

  1. - C++ में रेंज एडिशन - अंतर सरणी तकनीक

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

  1. C++ में लाइन रिफ्लेक्शन - Y-अक्ष के समानांतर सममित रेखा जांचें C++ में लाइन रिफ्लेक्शन - Y-अक्ष के समानांतर सममित रेखा जांचें

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