C ++ में, मैं सोच रहा हूं कि बूल टाइप 8 बिट लंबा (मेरे सिस्टम पर) क्यों है, जहां बूलियन मान रखने के लिए केवल एक बिट पर्याप्त है?
मुझे विश्वास था कि यह प्रदर्शन कारणों से था, लेकिन फिर 32 बिट्स या 64 बिट्स मशीन पर, जहां रजिस्टर 32 या 64 बिट्स चौड़े होते हैं, प्रदर्शन लाभ क्या है?
या यह सिर्फ इन 'ऐतिहासिक' कारणों में से एक है?
sizeof(bool)4 होगा। मैं कसम खा सकता हूं कि एमएससीएक्स में 32-बिट बूल थे, लेकिन मैंने बस कोशिश की और यह नहीं करता है।
vector<bool>यह नहीं है कि यह चतुर होने और बिट्स को पैक करने की कोशिश करता है, लेकिन यह ऐसा करने की कोशिश करता है और एसटीएल कंटेनर के रूप में खुद को छिपाने का प्रयास करता है । एक सादा बिटसेट तब तक ठीक होता जब तक वह एसटीएल कंटेनर होने का दिखावा नहीं करता।
boolWindows BOOLप्रकार के साथ C ++ डेटा प्रकार को भ्रमित कर सकते हैं जिसे टाइप किया जाता है long। तो sizeof(bool) != sizeof(BOOL), जो मुझे यकीन है कि बहुत भ्रम का कारण बनता है (और शायद उचित संख्या में बग)। विशेष रूप से चूंकि विंडोज में भी हैं booleanऔर BOOLEANटाइपराइफ हैं, जो इसके लिए उपनाम हैं unsigned char। यह भी ध्यान दें कि जबकि यह bool1 बाइट के लिए सामान्य है , सी ++ मानक में एक नोट है जो विशेष रूप से इंगित करता है कि sizeof(bool)बड़ा हो सकता है।