2012-07-12 9 views
129

संभव डुप्लिकेट:
Generic way to cast int to enum in C++सी ++ में int को enum कैसे डाला जाए?

मैं कैसे सी ++ में एक enum करने के लिए एक पूर्णांक डाली करते हैं?

उदाहरण के लिए:

enum Test 
{ 
    A, B 
}; 

int a = 1; 

मैं a कैसे परिवर्तित टेस्ट टाइप करने के लिए :: एक?

+84

मैं तथ्य यह है कि यह नकारात्मक स्कोर, दोहराया के रूप में चिह्नित है, लेकिन शीर्ष परिणाम है जब के लिए एक Google खोज कर रही है की तरह "सी ++ इंट टू एनम" – Rickard

+1

[लिंक] (http://www.enel.ucalgary.ca/People/Norman/enel315_winter1997/enum_types/) नोट इससे कोई फर्क नहीं पड़ता कि int enum प्रकार के स्थिरांक में से एक से मेल खाता है; प्रकार रूपांतरण हमेशा अवैध है। – Iwaz

+6

यदि यह एक डुप्लिकेट है, तो उत्तर इतने अलग क्यों हैं? – nobar

उत्तर

152
int i = 1; 
Test val = static_cast<Test>(i); 
+11

ऑटो वैल = static_cast (i); // सी ++ 11 – Mitch

+1

@ मिच इस मामले में 'ऑटो' का उपयोग करने के लिए मुझे क्या मिलता है? क्या कोई प्रदर्शन सुधार है? –

+1

कोई प्रदर्शन सुधार नहीं। केवल रखरखाव सुधार। – Mitch

50
Test e = static_cast<Test>(1); 
+0

एमएसडीएन: रूपांतरण की सुरक्षा सुनिश्चित करने में सहायता के लिए कोई रन-टाइम प्रकार की जांच नहीं की जाती है (http://msdn.microsoft.com/en-us/library/c36yw7x9(v=vs.80).aspx)। –

+6

एमएसडीएन: static_cast ऑपरेटर स्पष्ट रूप से एक अभिन्न मूल्य को एक गणना प्रकार में परिवर्तित कर सकता है। यदि अभिन्न प्रकार का मान गणना मूल्यों की सीमा के भीतर नहीं आता है, परिणामी गणना मूल्य अपरिभाषित है। –

+1

@ किरीलकोबेलेव अगर अभिन्न मूल्य को enum के अंतर्निहित प्रकार द्वारा दर्शाया जा सकता है तो परिणामस्वरूप enum में वह मान होना चाहिए। अन्यथा उत्पादित enum मान अभिव्यक्ति को enum के अंतर्निहित प्रकार में परिवर्तित करने से जो भी मूल्य परिणाम होगा। यदि वीसी ++ कुछ अलग करता है तो मुझे लगता है कि यह गैर-अनुरूप है। – bames53

13

आपका कोड

enum Test 
{ 
    A, B 
} 

int a = 1; 

समाधान

Test castEnum = (Test)a; 
+34

संकलक को गलतियों का पता लगाने के लिए सबसे अच्छा मौका देने के लिए, सी-स्टाइल कास्ट पूरी तरह से कास्ट करने से बचने के लिए सबसे अच्छा प्रतिबंध लगाने का का अच्छा विचार है।'static_cast' यहां एक बेहतर कलाकार होगा। –

+3

@ माइक सेमुर, समस्या यह है कि इस मामले में स्थिर कलाकारों का सी-कास्ट से कोई फर्क नहीं पड़ता है। यह कैसे और किस गलती का पता लगा सकता है ??? –

+7

@ किरीलकोबेलेव: समस्या यह है कि सी-स्टाइल कास्ट स्पष्ट नहीं है। यह 'static_cast' के बराबर हो सकता है, लेकिन यह 'const_cast' या इससे भी बदतर,' reinterpret_cast' या यहां तक ​​कि उन लोगों का संयोजन भी हो सकता है। यहां तक ​​कि अगर आप अब यह जान लेंगे कि यह किस प्रकार गिराएगा, मान लीजिए कि आप 'ए' को बाद में किसी अन्य प्रकार में बदलते हैं, तो यह आपके द्वारा कभी भी चेतावनी के बिना कास्टिंग परिवर्तनों का प्रकार बहुत अच्छा हो सकता है, आप इसे नहीं चाहते हैं। – KillianDS

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