सी ++ से reinterpret_cast
के लिए सी समतुल्य क्या है?reinterpret_cast के लिए सी समकक्ष क्या है?
उत्तर
int *foo;
float *bar;
// c++ style:
foo = reinterpret_cast< int * >(bar);
// c style:
foo = (int *)(bar);
कृपया मूल प्रश्न पर टिप्पणियों में लिटब का बहुत अच्छा बिंदु भी ध्यान दें। – Crashworks
सी शैली सिर्फ कोष्टक में प्रकार के नाम की तरह लग रहे डाले:
void *p = NULL;
int i = (int)p; // now i is most likely 0
जाहिर है इस से डाले के लिए बेहतर उपयोग करता है, लेकिन है कि बुनियादी वाक्य रचना है।
क्यों 'सबसे अधिक संभावना' ? यहां अपवाद क्या होगा? – bzeaman
आप स्वतंत्र रूप से सूचक प्रकार डाल सकता के रूप में आप किसी भी अन्य प्रकार होगा सी में।
पूरा होने के लिए:
void *foo;
some_custom_t *bar;
other_custom_t *baz;
/* Initialization... */
foo = (void *)bar;
bar = (some_custom_t *)baz;
baz = (other_custom_t *)foo;
का उपयोग करेंगे, आप किसी भी प्रकार का स्वतंत्र रूप से कास्ट कर सकते हैं, यह संभवतः ऐसा नहीं कर सकता जो आपको उम्मीद है, और शायद कुछ भी करने की गारंटी नहीं दी जा सकती है। –
यह मौजूद नहीं है, क्योंकि reinterpret_cast
बदल नहीं सकते [constness] [3]। उदाहरण के लिए,
int main()
{
const unsigned int d = 5;
int *g=reinterpret_cast< int* >(&d);
(void)g;
}
त्रुटि उत्पन्न करेगा:
dk.cpp: In function 'int main()':
dk.cpp:5:41: error: reinterpret_cast from type 'const unsigned int*' to type 'int*' casts away qualifiers
आप मूल्य का पता ले जा सकते हैं, तो एक तरह से एक अलग प्रकार के सूचक के लिए यह करने के लिए एक सूचक कास्ट करने के लिए है, और फिर पॉइंटर को कम करें।
उदाहरण के लिए, एक नाव करने के लिए पूर्णांक रूपांतरण:
int main()
{
float f = 1.0f;
printf ("f is %f\n", f);
printf ("(int) f is %d\n", (int)f);
printf ("f as an unsigned int:%x\n", *(unsigned int *)&f);
}
आउटपुट:
f is 1.000000
(int) f is 1
f as an unsigned int:3f800000
ध्यान दें कि यह शायद सी मानक से काम करने के लिए गारंटी नहीं है। आप फिर भी फ्लोट से int तक कास्ट करने के लिए reinterpret_cast का उपयोग नहीं कर सकते हैं, लेकिन यह एक प्रकार के समान होगा जो समर्थित था (उदाहरण के लिए, विभिन्न सूचक प्रकारों के बीच)।
चलो उपर्युक्त आउटपुट को समझ में आता है, वैसे भी।
बाइनरी में पिछले जवाब:
यह आईईईई-754 चल बिन्दु स्वरूप है: 0 की निशानी बिट, एक 8 के बाद -बीबी एक्सपोनेंट (011 1111 1), इसके बाद 23 बिट मंटिसा (सभी शून्य)।
प्रतिपादक की व्याख्या करने के लिए, घटाना 127: 01111111b = 127, और 127 - 127 = 0. प्रतिपादक 0.
अपूर्णांश व्याख्या करने के लिए, 1 एक दशमलव बिंदु के बाद के बाद इसे लिखने है: 1.00000000000000000000000 (23 शून्य)। यह दशमलव में 1 है।
इसलिए हेक्स 3f800000 द्वारा प्रतिनिधित्व किया गया मान 1 * 2^0 = 1 है, जैसा कि हमने उम्मीद की थी।
क्या ग के लिए एक REINTERPRET
ऑपरेटर के बारे में:
#define REINTERPRET(new_type, var) (* ((new_type *) & var))
मैं, कहते हैं "reinterpret_cast" पसंद नहीं है क्योंकि कलाकारों रूपांतरण (ग में) का अर्थ है, पुनर्व्याख्या विपरीत मतलब है, जबकि: कोई रूपांतरण।
किसी को ऐसा क्यों करना चाहिए? यह भ्रामक है। अपना कोड अपरिवर्तित जटिल नहीं बनाओ। –
- 1. reinterpret_cast
- 2. MsgWaitForMultipleObjects के सी # समकक्ष क्या है?
- 3. सी ++ के लिए समकक्ष DoEvents?
- 4. सी-स्टाइल कास्ट बनाम reinterpret_cast
- 5. GridView के लिए addFooterView समकक्ष क्या है?
- 6. लिनक्स के तहत AutoResetEvent के लिए C++ समकक्ष क्या है?
- 7. क्या सी # में std :: nth_element समकक्ष है?
- 8. सी # में समकक्ष जेवीएम क्या है?
- 9. static_cast और reinterpret_cast के बीच क्या अंतर है?
- 10. जेएस के 'मानचित्र()' फ़ंक्शन के उद्देश्य-सी समकक्ष क्या है?
- 11. पर्ल के पुनरावृत्ति ऑपरेटर के सी # समकक्ष क्या है?
- 12. क्या सुंदरसप/पायथन में समकक्ष समकक्ष है?
- 13. reinterpret_cast कास्ट लागत
- 14. JSONObject के जैक्सन 2 समकक्ष क्या है?
- 15. MySQL, खाली मूल्यों के लिए समकक्ष समकक्ष?
- 16. मैवेन आर्केटाइप के लिए समकक्ष समकक्ष?
- 17. गिट - आरएम समकक्ष "एड।" के लिए समकक्ष?
- 18. क्या जीसीसी में स्टडकॉल के लिए कोई समकक्ष है?
- 19. वीबी.नेट में सीटीपी के सी # समकक्ष क्या है?
- 20. सी # रीडोनली कीवर्ड के वीबी.NET समकक्ष क्या है?
- 21. BufferedInputStream (जावा में) के सी #/.NET समकक्ष क्या है?
- 22. लिस्प में सी structs के बेवकूफ समकक्ष क्या है?
- 23. सी # समकक्ष "एमकेलिंक/जे" के बराबर क्या है?
- 24. अपाचे पीओआई एपीआई के सी # समकक्ष क्या है?
- 25. इस सी # एन्कोडिंग कोड के PHP समकक्ष क्या है?
- 26. आईफोन के लिए जैक्सन समकक्ष?
- 27. सी ++ गेटलाइन के पाइथन समकक्ष()
- 28. क्या IsNull के लिए PostgreSQL समकक्ष()
- 29. क्या सी की इनलाइन अज्ञात संरचना परिभाषा के लिए समकक्ष सी # वाक्यविन्यास है?
- 30. पुराने (सी-जैसे) fscanf विधि के लिए आधुनिक समकक्ष (सी ++) शैली क्या है?
ध्यान दें कि सी (+ टाइप) एक्सट्रेशन सी सी के बराबर सी ++ में 'reinterpret_cast' से अधिक कुछ कर सकता है (ठीक है, आखिरकार, वे दो अलग-अलग भाषाएं हैं - इसलिए हम वैसे भी ज्यादा उम्मीद नहीं कर सकते हैं)। यह एक दूसरे में पूर्णांक और फ़्लोटिंग बिंदु प्रकार कास्ट कर सकते हैं। उत्तर से निष्कर्ष निकालें कि सी ++ में '(प्रकार) अभिव्यक्ति '' reinterpret_cast' के बराबर है। –
@litb यह एक दिलचस्प टिप्पणी है। मैंने वीसी -2008 द्वारा उत्पादित असेंबली कोड की जांच की और यह एक ही कोड को छोड़ देता है। मुझे यकीन है कि यह पर्याप्त नहीं है, लेकिन मैं वास्तव में यह जानना चाहता हूं कि यह कब भिन्न होता है? – AraK
संकलन समय त्रुटि और अपरिभाषित व्यवहार के अलग-अलग मामले: 'int a = reinterpret_cast ('a'); '(संकलन त्रुटि)। 'संरचना ए {int ए; }; संरचना बी {int बी; }; संरचना सी: ए, बी {int सी; }; int मुख्य() {सी सी; बी एंड बी = reinterpret_cast <बी &>(c); बी.बी = 1; } '(अपरिभाषित व्यवहार: जब आप' (बीएंड) सी' में बदलते हैं तो अंतर देखें: यदि बी उप-ऑब्जेक्ट ऑफसेट '! = 0x0' पर संग्रहीत है, तो' reinterpret_cast' को किसी भी समायोजन की परवाह करने की आवश्यकता नहीं है , जबकि एक सी-स्टाइल कास्ट करेगा। –