के अनुसार सी ++ मानक n4713 , एक बहुत ही इसी तरह के कोड का टुकड़ा प्रदान की जाती है। उपयोग किया जाने वाला प्रकार BOOL(कस्टम) है, लेकिन यह किसी भी प्रकार पर लागू हो सकता है।
12.2.4
4 यदि मूल्य सही या गलतboolकिसी भी आकार केबिट-फ़ील्ड(एक बिट बिट-फ़ील्ड सहित)में संग्रहीत किया जाता है, तो मूलboolमूल्य और बिट-फ़ील्ड का मूल्य बराबर की तुलना करेगा। यदि किसी एन्यूमरेटर का मान समान एन्यूमरेशन प्रकार के बिट-फील्ड में संग्रहित किया जाता है और बिट-फील्ड में बिट्स की संख्या उस एन्यूमरेशन टाइप (10.2) के सभी मानों को रखने के लिए पर्याप्त होती है, तो एन्यूमरेटर वैल्यू और बिट-फील्ड का मूल्य बराबर होगा । [ उदाहरण:
enum BOOL { FALSE=0, TRUE=1 };
struct A {
BOOL b:1;
};
A a;
void f() {
a.b = TRUE;
if (a.b == TRUE) // yields true
{ /* ... */ }
}
- अंतिम उदाहरण]
पहली नज़र में, बोल्ड भाग व्याख्या के लिए खुला दिखाई देता है। हालाँकि, सही आशय स्पष्ट हो जाता है जब enum BOOLसे प्राप्त होता है int।
enum BOOL : int { FALSE=0, TRUE=1 }; // ***this line
struct mystruct { BOOL enabled:1; };
int main()
{
struct mystruct s;
s.enabled = TRUE;
if(s.enabled == TRUE)
printf("Is enabled\n"); // --> we think this to be printed
else
printf("Is disabled !!\n");
}
उपरोक्त कोड के साथ यह बिना चेतावनी देता है -Wall -pedantic:
चेतावनी: 'रहस्यमय :: सक्षम' 'एनम BOOL' के सभी मूल्यों को रखने के लिए बहुत छोटा है
struct mystruct { BOOL enabled:1; };
आउटपुट है:
अक्षम है !! (उपयोग करते समय enum BOOL : int)
यदि enum BOOL : intइसे सरल बनाया जाता है enum BOOL, तो आउटपुट मानक मान के अनुसार होता है:
सक्षम है (उपयोग करते समय enum BOOL)
इसलिए, यह निष्कर्ष निकाला जा सकता है, जैसा कि कुछ अन्य उत्तरों में है, वह intप्रकार केवल "बिट" को केवल एक बिट बिट-फ़ील्ड में संग्रहीत करने के लिए पर्याप्त बड़ा नहीं है।
intमुझे लगता है कि यह केवल मूल्यों को पकड़ सकता है0और-1।