c++ - क्या "enum वर्ग" एक वर्ग प्रकार सी++ में है?




c++11 enums (2)

मैं cppreference का उपयोग करके C ++ में गणण घोषणा के बारे में पढ़ता हूं

इसके बाद मैंने ऐन्यूम वर्ग बना दिया है और जांच कर सकते हैं कि यह क्लास प्रकार है या नहीं std::is_class का उपयोग कर रहा है।

#include <iostream>

enum class Enum 
{
    red = 1, blue, green
};

int main() 
{
    std::cout << std::boolalpha;
    std::cout << std::is_class<Enum>::value << '\n';
}

फिर मैंने संकलित किया और लिनक्स प्लेटफॉर्म पर जी + + कंपाइलर में भाग लिया, यह false मान प्रिंट करता है।

तो क्या enum कक्षा प्रकार है या नहीं? यदि enum एक वर्ग प्रकार है, तो मुझे झूठी मूल्य क्यों मिल रहा है?


class कीवर्ड के बावजूद, एन्यूमरेशन क्लासेस नहीं हैं। उस कीवर्ड का केवल मतलब है कि गणक को कुछ प्रकार के नियमों का सम्मान करना चाहिए (और अंतर्निहित अभिन्न रूपांतरणों को भी रोकता है)

कीवर्ड की पसंद नए प्रकार 1 के बारे में लाए गए पहलुओं के कारण है, और पूर्व-सी + 11 युग में स्कॉन्ड एन्युमेमेटर को कैसे हॉप किया गया था, कहा पहलुओं को प्राप्त करने के लिए:

struct Enum { // could just as well be a class.
  enum {
    red = 1, blue, green
  };
};

जिसने केवल गणक को योग्य नाम के माध्यम से एक्सेस करने की इजाजत दी। यद्यपि यह सच है कि गलत स्कॉन्डेड एन्यूमरेशन जैसे अनूठे रूपांतरणों को नहीं रोका।

is_class का मतलब वर्ग / is_class की पहचान करना है।

1 बी। स्ट्राउटस्ट्रुप - सी ++ 11 अकसर किये गए सवाल


enum class एक class परिभाषा नहीं है - कीवर्ड का संयोजन एक स्कॉड गणना को परिभाषित करने के लिए उपयोग किया जाता है, जो कि class से पूरी तरह से अलग इकाई है

std::is_class सही यहाँ false देता है। यदि आप std::is_enum उपयोग करते हैं, तो यह true वापस आ जाएगा।

मानक से :

केवल enum की एक enum-key के साथ घोषित गणन प्रकार एक अनसॉक्टेड गणना है, और इसके गणक अनसॉक्ड एन्युमेमेटर हैं। Enum- कुंजी enum class और enum struct semantically समकक्ष हैं; इनमें से एक के साथ घोषित गणण प्रकार एक स्कॉड गणना है, और इसकी गणनाकर्ताओं को स्कैन किया जाता है।

मानक में कहीं भी एक " class प्रकार" होने वाला एक enum class का कोई जिक्र नहीं है।





is-class