2011-06-27 12 views
12

मैंने इस सवाल की खोज की थी कि किसी ने पहले यह पूछना होगा। मैंने कोई परिणाम नहीं बढ़ाया, इसलिए यदि यह हुआ है, तो कृपया लिंक पोस्ट करें और प्रश्न को बंद करने के लिए स्वतंत्र महसूस करें।इस कॉलन एक enum घोषणा में क्या करता है?

मैं EASTL में इस कोड को भर में भाग गया:

enum : size_type { // size_type = size_t     
       npos  = (size_type)-1, 
       kMaxSize = (size_type)-2 
      }; 

मैं एक enum घोषणा उस तरह का सामना करना पड़ा कभी नहीं किया है। इस मामले में : क्या करता है?

उत्तर

8

यह एक माइक्रोसॉफ्ट विस्तार आप enum मूल्यों के आधार प्रकार का चयन करने देता है। उदाहरण के लिए, यह आपको यह निर्दिष्ट करने देता है कि मानों को हस्ताक्षरित नहीं किया गया है (माइक्रोसॉफ्ट के कंपाइलर्स आमतौर पर डिफ़ॉल्ट रूप से हस्ताक्षरित होते हैं) या वे केवल 8 या 16 बिट्स (माइक्रोसॉफ्ट आमतौर पर 32 बिट्स पर डिफ़ॉल्ट) पर कब्जा करते हैं।

सिंटैक्स यहां दस्तावेज किया गया है: http://msdn.microsoft.com/en-us/library/2dzy4k6e(v=VS.100).aspx लेकिन मैं वास्तव में क्या करता हूं इसके आधिकारिक दस्तावेज नहीं ढूंढ पा रहा हूं।

सी ++ 11 एक समान सुविधा जोड़ता है, लेकिन थोड़ा अलग वाक्यविन्यास के साथ। सी ++ 11 में आप इसे इस तरह लिखना चाहते हैं:

enum class MyEnum : size_type { .. values .. }; 
13

सी ++ 0x में, आप enum के लिए अंतर्निहित प्रकार निर्दिष्ट कर सकते हैं। इस मामले में, यह size_type होगा।

(और यह पूर्व C++ 0x के लिए अन्य स्थानों में एक विस्तार के रूप, स्पष्ट रूप से समर्थन किया जा सकता है।)

+1

मेरा मानना ​​है कि C++ 0x 'enum वर्ग' जब अंतर्निहित प्रकार को निर्दिष्ट की आवश्यकता है। 'कक्षा' के बिना यह एक कंपाइलर-विक्रेता विस्तार होना चाहिए। –

+1

@ जेसे: आह, ठीक है आप हैं। आपके उत्तर में +1। – GManNickG

+1

@ जेसे: असल में, 'कक्षा' के बिना कोड सी ++ 11 और बाद में ठीक काम करता है। सादा 'enum' की बजाय 'एनम क्लास' या 'एनम स्ट्रक्चर' का उपयोग करना * अनसुलझा * की बजाय गणना * स्कॉप्ड * बनाता है, यानी, यह पूर्ण पूर्णांक रूपांतरण को रोकता है। किसी भी मामले में अंतर्निहित प्रकार प्रदान करना संभव है। – Frank

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