यहां तक कि कुछ पुराने जवाबों में 44 उत्थान मिले, मैं उन सभी से असहमत हूं। संक्षेप में, मुझे नहीं लगता कि हमें underlying type
एनम के बारे में परवाह करनी चाहिए ।
सबसे पहले, C ++ 03 Enum टाइप का अपना एक अलग प्रकार है जिसमें साइन की कोई अवधारणा नहीं है। चूंकि सी ++ 03 मानक सेdcl.enum
7.2 Enumeration declarations
5 Each enumeration defines a type that is different from all other types....
इसलिए जब हम एक एनम प्रकार के संकेत के बारे में बात कर रहे हैं, तो कहिए कि <
ऑपरेटर का उपयोग करते हुए 2 एनम ऑपरेंड्स की तुलना करते हुए , हम वास्तव में एनुम प्रकार को कुछ अभिन्न प्रकार में परिवर्तित करने के बारे में बात कर रहे हैं। यह इस अभिन्न प्रकार का संकेत है जो मायने रखता है । और जब एनम को अभिन्न प्रकार में परिवर्तित करते हैं, तो यह कथन लागू होता है:
9 The value of an enumerator or an object of an enumeration type is converted to an integer by integral promotion (4.5).
और, जाहिर है, इनम के अंतर्निहित प्रकार का इंटीग्रल प्रमोशन से कोई लेना-देना नहीं है। चूंकि मानक इस तरह इंटीग्रल प्रमोशन को परिभाषित करता है:
4.5 Integral promotions conv.prom
.. An rvalue of an enumeration type (7.2) can be converted to an rvalue of the first of the following types that can represent all the values of the enumeration
(i.e. the values in the range bmin to bmax as described in 7.2: int, unsigned int, long, or unsigned long.
तो, क्या एक एनुम प्रकार बनता है signed int
या unsigned int
इस पर निर्भर करता है कि क्या signed int
परिभाषित एन्यूमरेटर्स के सभी मूल्य शामिल हो सकते हैं, एनम के अंतर्निहित प्रकार नहीं।
मेरे संबंधित प्रश्न देखें
इंटीग्रल टाइप में बदलने के बाद C ++ Enum टाइप का गलत नाम