मान लिया जाये की कुछ बिल्ट-इन प्रकार, int &
प्रकार के कलाकारों lvalue n1
(जो भी प्रकार यह था) की पुनर्व्याख्या के lvalue के रूप में प्रदर्शन n2
है int
टाइप करें।
int n2 = (int &) n1
घोषणा के संदर्भ में, अगर n1
से ही प्रकार int
के lvalue है, डाली ज़रूरत से ज़्यादा है, यह पूरी तरह से कुछ भी नहीं बदलता है। यदि n1
const int
प्रकार का एक आभासी है, तो कास्ट बस स्थिरता को दूर करता है, जो उपर्युक्त संदर्भ में भी अनिवार्य है। यदि n1
कुछ अन्य प्रकार के lvalue है, डाली बस स्मृति प्रकार int
की वस्तु के रूप n1
के कब्जे में (इस प्रकार punning कहा जाता है) reinterprets। यदि n1
एक लालसा नहीं है तो कोड खराब है।
तो, int n2 = (int&) n1
की तरह कोड में int &
को कच्चा ही है गैर-अनावश्यक (कुछ वास्तविक प्रभाव पड़ता है) यह punning टाइप करता है जब, यानी जब n1
कुछ अन्य प्रकार के (नहीं int
) के एक lvalue है। उदाहरण
float n1 = 5.0;
int n2 = (int &) n1;
जो कहने के लिए
int n2 = *(int *) &n1;
करने के लिए और करने के लिए
int n2 = *reinterpret_cast<int *>(&n1);
जरूरत नहीं बराबर होगा के लिए, यह एक बहुत बुरा प्रोग्रामिंग अभ्यास है।
यह बीटीडब्ल्यू है, समर्पित सी ++ शैली शैली का उपयोग करते समय मामलों में से एक को दृढ़ता से प्राथमिकता दी जाती है। यदि कोड के लेखक ने सी-स्टाइल कास्ट के बजाय reinterpret_cast
का उपयोग किया है, तो आपको शायद इस प्रश्न से पूछना नहीं होगा।
बेशक, यदि n1
स्वयं int
प्रकार है, तो इस कलाकार के लिए कोई सार्थक स्पष्टीकरण नहीं है। उस मामले में, यह फिर से पूरी तरह से अनिवार्य है।
पीएस एक संभावना भी है कि n2
ओवरलोडेड रूपांतरण ऑपरेटर के साथ int &
प्रकार के साथ एक वर्ग है, जो पूरी तरह से एक अलग कहानी है ... वैसे भी, आपको यह बताना होगा कि n2
तब होता है जब आप ऐसे प्रश्न पूछते हैं।
मेरा सी ++ जंगली है लेकिन मुझे लगता है कि एक * या तो इंट आवंटित करने या इनट्स की एक श्रृंखला रखने के लिए इस्तेमाल किया जा सकता है। हालांकि मुझे इस मामले में क्या मतलब होगा और इसका क्या मतलब होगा। –
एन 1 का प्रकार क्या है? –
"संशोधित एन 1 एन 1 को प्रतिबिंबित नहीं करता है" ?? –