2016-09-21 11 views
12

मैं enums के अंतर्निहित प्रकार है, जहां एक जवाब उद्धरण स्टैंडर्ड सी ++ 7.2/5 के रूप में के बारे में this question भर में आया था:क्या होता है यदि एक enum एक अभिन्न प्रकार में फिट नहीं हो सकता है?

एक गणन के अंतर्निहित प्रकार एक अभिन्न प्रकार है कि सभी प्रगणक में परिभाषित मूल्यों का प्रतिनिधित्व कर सकते हैं गणन। यह कार्यान्वयन-परिभाषित किया गया है जो अभिन्न प्रकार को गणना के लिए अंतर्निहित प्रकार के रूप में प्रयोग किया जाता है, सिवाय इसके कि अंतर्निहित प्रकार int से बड़ा नहीं होगा जब तक कि एक एनयू-मेरिएटर का मूल्य किसी इंट या हस्ताक्षरित int में फिट नहीं हो सकता है।

यह सभी उचित मामलों के लिए स्पष्ट है। लेकिन क्या होता है यदि मैं इतनी हास्यास्पद रूप से बड़ा हूं कि यह लंबे समय तक फिट नहीं हो सकता है?

(पता नहीं क्यों यह कभी व्यवहार में क्या होगा, लेकिन शायद मैं विनाशकारी महसूस कर रहा हूँ और एक मुक्त दोपहर)

इस व्यवहार मानक द्वारा परिभाषित है?

+6

यदि आप बड़ी संख्या में 'enum' बनाते हैं, तो आपकी स्रोत फ़ाइल डिस्क पर फिट नहीं होगी :-) – dasblinkenlight

+1

मैं enum में 2^64 नामों के साथ वास्तव में भयानक शीर्षलेख फ़ाइल की कल्पना कर रहा था। क्या यह काम नहीं करेगा? – Bear

+3

यह विरोध करने के लिए आश्चर्यजनक रूप से सरल है, मेरा जवाब देखें। – Bathsheba

उत्तर

10

enum foo : int 
{ 
    bar = INT_MAX, 
    oops 
}; 

के व्यवहार और इसी तरह के अपरिभाषित है।

मैंने इस प्रकार को int पर मजबूर कर थोड़ा सा धोखा दिया है, लेकिन यह आपके प्लेटफ़ॉर्म पर उपलब्ध सबसे बड़े अभिन्न प्रकार पर लागू होता है।

+4

क्या यह भी यूबी है जब enum के अंतर्निहित प्रकार 'हस्ताक्षरित' है? –

+0

ओह यह एक सुंदर सवाल है। कृपया पूछो! मैं तुरंत इसे ऊपर उठाऊंगा। – Bathsheba

+2

http://stackoverflow.com/questions/39621098/what-happens-if-an-enum-cannot-fit-into-an-unsigned-integral-type –

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