2017-03-15 5 views
17
enum class E 
{}; 

int main() 
{ 
    E e1{ 0 }; // ok 

    E e2 = 0; // not ok 
    // error : cannot initialize a variable of 
    // type 'E' with an rvalue of type 'int' 
} 

मेरा संकलक विकल्प -std=c++1z के साथ है।स्टैटिक_कास्ट के बिना एक पूर्णांक टाइप किए गए enum को पूर्णांक के साथ क्यों प्रारंभ किया जा सकता है?

यह अपेक्षा की जाती है कि E e2 = 0; ठीक नहीं है, क्योंकि E दृढ़ता से टाइप किया गया है। हालांकि, मुझे आश्चर्य हुआ कि E e1{ 0 }; ठीक होना चाहिए।

static_cast के बिना एक दृढ़ता से टाइप किए गए enum को पूर्णांक के साथ क्यों प्रारंभ किया जा सकता है?

+3

[दस्तावेज] (http://en.cppreference.com/w/cpp/language/enum) के अनुसार सी ++ 17 के बाद से अनुमति है – UnholySheep

उत्तर

14

reference सूची intializers का उपयोग कर को देखते हुए बाद से सी ++ 17 अनुमति दी है:

दोनों scoped गणन प्रकार और unscoped गणन प्रकार जिसका अंतर्निहित प्रकार तय हो गई है एक कलाकारों के बिना एक पूर्णांक से प्रारंभ किया जा सकता है, सूची आरंभीकरण का उपयोग कर, यदि निम्न में से सभी सत्य है:

  • आरंभीकरण है डायरेक्ट-सूची-प्रारंभ
  • प्रारंभकर्ता सूची है केवल एक ही तत्व
  • गणन या तो scoped या अंतर्निहित प्रकार तय साथ unscoped है
  • रूपांतरण गैर संकुचन है

बजना

( implementation status page के अनुसार) संस्करण 3.9 के बाद से इस का समर्थन करता है

जीसीसी संस्करण 7 के बाद से इसका समर्थन करता है (standards support page के अनुसार)

अतिरिक्त संदर्भ और प्रेरक के लिए यह सी ++ प्रस्ताव देखें आयन: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0138r2.pdf

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