2014-09-18 7 views
5

आपको निम्नलिखित के लिए सी-स्टाइल कास्ट क्यों चाहिए?सूचक के लिए स्टेटिक_कास्ट पूर्णांक पता

int* ptr = static_cast<int*>(0xff); // error: invalid static_cast from type 'int' 
            // to type 'int*' 
int* ptr = (int*) 0xff; // ok. 
+7

तुम भी 'reinterpret_cast' जो सी-शैली डाली अंत में वैसे भी उपयोग करेगा उपयोग कर सकते हैं। हालांकि अभी भी एक अच्छा विचार नहीं है। –

उत्तर

11

static_cast केवल दो संबंधित प्रकार के बीच डाली कर सकते हैं। एक पूर्णांक एक सूचक है और इसके विपरीत से संबंधित नहीं है, तो आप के बजाय reinterpret_cast उपयोग करने के लिए है, जो बताता है को संकलक पूर्णांक के टुकड़े पुनर्व्याख्या रूप में यदि वे एक सूचक (और इसके विपरीत) थे की जरूरत है:

int* ptr = reinterpret_cast<int*>(0xff); 

निम्नलिखित पढ़ें अधिक जानकारी के लिए:

Type conversions

2

आप एक सी शैली डाली या सीधे reinterpret_cast यह खड़ा है जब एक सूचक को एक पूर्णांक कास्टिंग के लिए की जरूरत है, क्योंकि मानक असंबंधित प्रकार के लिए तो कहते हैं।

मानक जनादेश वहाँ उन डाले, क्योंकि

  1. आप वहाँ कुछ खतरनाक कर रहे हैं।
  2. आप कुछ शायद ही कभी उपयोगी कर रहे हैं।
  3. आप कुछ अत्यधिक कार्यान्वयन-निर्भर कर रहे हैं।
  4. अधिकतर समय, यह केवल एक प्रोग्रामिंग-त्रुटि है।

When should static_cast, dynamic_cast, const_cast and reinterpret_cast be used?
Regular cast vs. static_cast vs. dynamic_cast

संबंधित मुद्दे