2011-06-13 19 views
13

में एनम क्लास पर स्विचिंग सी ++ 0x में नई "एनम क्लास" घोषणाएं नए-फंसे हुए एनम्स पर स्विचिंग की अनुमति देगी?सी ++ 0x

मैं पूछता हूं कि मानक क्या कहता है, संकलक समर्थन के बारे में नहीं।

+9

@ बंद-मतदाता: यह विषय कैसे है? – GManNickG

उत्तर

17

n3242 मसौदा से:

6.4.2 स्विच बयान [stmt.switch]

[...]

2 हालत अभिन्न प्रकार का होगा, गणना प्रकार , या एक वर्ग प्रकार के लिए जिसके लिए एक गैर-स्पष्ट अभिन्न अंग या गणना प्रकार में रूपांतरण फ़ंक्शन मौजूद है (12.3)।

7.2 गणन घोषणाओं [dcl.enum]

[...]

enum-key: 
    enum 
    enum class 
    enum struct 

यह हाँ का मतलब है।

7

हां, स्कॉप्ड (enum {class, struct}) गणना और गणनाकर्ता स्विच स्टेटमेंट के संदर्भ में बिल्कुल अनसुलझा (enum, पुरानी शैली) के समान व्यवहार करेंगे।

n3242 - 6.4.2.2 [stmt.switch]:

हालत अभिन्न प्रकार, गणन प्रकार, या एक वर्ग प्रकार के होंगे जिसके लिए अभिन्न के लिए एक एकल गैर स्पष्ट रूपांतरण समारोह या गणना प्रकार मौजूद है (12.3)। यदि स्थिति वर्ग प्रकार की है, तो स्थिति उस रूपांतरण फ़ंक्शन को कॉल करके परिवर्तित की जाती है, और रूपांतरण का नतीजा के स्थान पर इस खंड के शेष के लिए मूल स्थिति के स्थान पर उपयोग किया जाता है। इंटीग्रल प्रचार प्रदर्शन किया जाता है।

case constant-expression : 

जहां निरंतर अभिव्यक्ति एक अभिन्न निरंतर अभिव्यक्ति (5.19) में किया जाएगा: इस प्रकार किसी भी बयान स्विच बयान भीतर एक या अधिक मामले लेबल के साथ लेबल किया जा सकता। अभिन्न निरंतर अभिव्यक्ति को स्विच स्थिति के प्रचारित प्रकार में स्पष्ट रूप से परिवर्तित किया जाता है। में कोई भी मामला स्थिरांक स्विच स्विच के प्रचारित प्रकार के रूपांतरण के बाद एक ही स्विच के समान मूल्य होगा।

स्थिति के मामले में, एक गणना प्रकार सूचीबद्ध है। इसमें स्कॉप्ड और असुरक्षित दोनों शामिल हैं (देखें n3242 - 7.2)।

केस लेबल के लिए, वे अभिन्न निरंतर अभिव्यक्ति होना चाहिए। जो अभिन्न या गणना प्रकार की निरंतर अभिव्यक्ति है (देखें n3242 - 5.19.3)।