ใน C ++ ฉันสงสัยว่าทำไมประเภทบูลถึงมีความยาว 8 บิต (ในระบบของฉัน) ซึ่งมีเพียงบิตเดียวเท่านั้นที่จะเก็บค่าบูลีนได้?
ฉันเคยเชื่อว่าเป็นเพราะเหตุผลด้านประสิทธิภาพ แต่ในเครื่อง 32 บิตหรือ 64 บิตที่รีจิสเตอร์กว้าง 32 หรือ 64 บิตข้อดีด้านประสิทธิภาพคืออะไร?
หรือเป็นเพียงหนึ่งในเหตุผลทางประวัติศาสตร์เหล่านี้?
sizeof(bool)
จะเป็น 4 ฉันสาบานได้ว่า msvc มีบูล 32 บิต แต่ฉันลองแล้วมันไม่เป็นเช่นนั้น
vector<bool>
ไม่ได้ว่ามันพยายามที่จะฉลาดและแพ็ค bools เป็นบิต แต่ก็พยายามที่จะทำเช่นนี้และปลอมตัวเป็นภาชนะ STL บิตเซ็ตธรรมดาจะใช้ได้ดีตราบเท่าที่ไม่ได้แสร้งทำเป็นว่าเป็นคอนเทนเนอร์ STL
bool
ชนิดข้อมูลกับของ Windows BOOL
ชนิดซึ่งเป็น typedefed long
ไป ดังนั้นsizeof(bool) != sizeof(BOOL)
ซึ่งฉันแน่ใจว่าทำให้เกิดความสับสนอย่างมาก (และอาจเป็นข้อบกพร่องจำนวนมาก) โดยเฉพาะอย่างยิ่งเนื่องจากยังมีboolean
และBOOLEAN
typedef ใน Windows ซึ่งเป็นนามแฝงสำหรับunsigned char
. นอกจากนี้โปรดทราบว่าแม้ว่าโดยทั่วไปbool
จะมีขนาด 1 ไบต์ แต่มาตรฐาน C ++ ก็มีหมายเหตุที่ระบุโดยเฉพาะว่าsizeof(bool)
สามารถมีขนาดใหญ่กว่าได้