Enum कलाकारों के लिए एक पूर्णांक के लिए, एक अपवाद है अगर यह अमान्य है तो भी नहीं फेंक दिया। क्या मैं इस व्यवहार पर भरोसा कर सकता हूं? यह निम्नलिखित कोड काम करता है।
enum animal { CAT = 1, DOG = 2 };
int y = 10;
animal x = static_cast<animal>(y);
वास्तव में, enums अपनी परिभाषा में enumerations की सूची तक ही सीमित नहीं हैं, और है कि बस कुछ अजीब मोड़ नहीं है, लेकिन enums के एक जानबूझकर उपयोग किया सुविधा - पर विचार कैसे गणन मान अक्सर एक साथ ored कर रहे हैं पैक करने के लिए उन्हें एक ही मूल्य में, या 0 पास किया जाता है जब कोई भी गणना लागू नहीं होती है।
सी ++ 03 में, यह स्पष्ट प्रोग्रामर नियंत्रण में नहीं है कि संकलक द्वारा बैकिंग पूर्णांक का कितना बड़ा उपयोग किया जाएगा, लेकिन सीमा 0 और स्पष्ट रूप से सूचीबद्ध गणनाओं की अवधि की गारंटी है।
तो, यह जरूरी नहीं है कि 10 animal
के लिए वैध, मूल्यवान मूल्य नहीं है। भले ही बैकिंग वैल्यू उस अभिन्न मूल्य को स्टोर करने के लिए पर्याप्त नहीं था, जिसे आप animal
में कनवर्ट करने का प्रयास कर रहे हैं, एक संकुचित रूपांतरण लागू किया जा सकता है - आम तौर पर यह कम से कम महत्वपूर्ण बिट्स का उपयोग करेगा जो एनम बैकिंग प्रकार पकड़ सकता है, छोड़ना कोई अतिरिक्त उच्च आदेश बिट्स, लेकिन विवरण के लिए मानक की जांच करें।
प्रैक्टिस में, पीसी और सर्वर हार्डवेयर पर सबसे आधुनिक सी ++ 03 कंपाइलर्स गणना के लिए एक (32 बिट) int
का उपयोग करने के लिए डिफ़ॉल्ट रूप से डिफ़ॉल्ट हैं, क्योंकि सी लाइब्रेरी फ़ंक्शंस में कॉल करने में सुविधा होती है जहां 32 बिट मानक हैं।
मैं कभी एक संकलक को अपवाद फेंकने की उम्मीद करता हूं जब static_cast<>
का उपयोग करके किसी भी मूल्य को enum में shoehorned किया जाता है।
स्रोत
2012-07-19 00:11:03
स्रोत और गंतव्य प्रकारों के आधार पर, static_cast का परिणाम अपरिभाषित व्यवहार हो सकता है, जिसमें अपवाद फेंकना शामिल हो सकता है। –
यह पूछना बेहतर हो सकता है, क्या यह एक अपवाद फेंक सकता है जबकि कार्यक्रम एक अच्छी तरह से परिभाषित राज्य में है। बेशक यूबी सैद्धांतिक रूप से अपवाद फेंक सकता है, लेकिन यूबी सैद्धांतिक रूप से आपके हार्ड ड्राइव को भी प्रारूपित कर सकता है। – Wyzard
@ जेरीकॉफिन: मानक 5.2.9 केवल इतना कहता है कि कुछ नतीजों को अपरिभाषित किया जा सकता है, और ऐसे परिणामों के बाद के उपयोग में अपरिभाषित व्यवहार हो सकता है, लेकिन स्वयं को कास्ट से अपरिभाषित व्यवहार का कोई स्पष्ट उल्लेख नहीं है। क्या मैं कुछ भूल रहा हूँ? –