ฉันไม่พบคำตอบในเอกสารมาตรฐาน มาตรฐานของภาษา C ++ จำเป็นต้องsizeof(bool)
เป็น 1 เสมอ (สำหรับ 1 ไบต์) หรือมีการกำหนดการใช้งานขนาดนี้หรือไม่
ฉันไม่พบคำตอบในเอกสารมาตรฐาน มาตรฐานของภาษา C ++ จำเป็นต้องsizeof(bool)
เป็น 1 เสมอ (สำหรับ 1 ไบต์) หรือมีการกำหนดการใช้งานขนาดนี้หรือไม่
คำตอบ:
sizeof(bool)
มีการกำหนดการนำไปใช้งานและมาตรฐานให้ความสำคัญกับข้อเท็จจริงนี้เป็นอย่างมาก
§5.3.3 / 1 ย่อ:
sizeof(char)
,sizeof(signed char)
และsizeof(unsigned char)
เป็น 1; ผลลัพธ์ของsizeof
การนำไปใช้กับประเภทพื้นฐานอื่น ๆ คือการกำหนดการนำไปใช้งาน [หมายเหตุ: โดยเฉพาะsizeof(bool)
และsizeof(wchar_t)
มีการกำหนดการนำไปใช้งาน 69) ]
เชิงอรรถ 69):
sizeof(bool)
ไม่จำเป็นต้องเป็น 1
http://msdn.microsoft.com/en-us/library/tf4dy80a.aspx
"ใน Visual C ++ 4.2 ไฟล์ส่วนหัว C ++ มาตรฐานมี typedef ที่จัดวางบูลด้วย int ใน Visual C ++ 5.0 และใหม่กว่าบูลจะถูกนำไปใช้เป็นชนิดในตัวที่มีขนาด 1 ไบต์นั่นหมายความว่าสำหรับ Visual C ++ 4.2 การเรียกของ sizeof (bool) ให้ผล 4 ในขณะที่ Visual C ++ 5.0 ขึ้นไปผลตอบแทนการโทรเดียวกัน 1 สิ่งนี้อาจทำให้เกิดปัญหาหน่วยความจำเสียหายหากคุณกำหนดสมาชิกโครงสร้างของประเภทบูลใน Visual C ++ 4.2 และกำลังผสมวัตถุ ไฟล์ (OBJ) และ / หรือ DLL ที่สร้างขึ้นด้วยคอมไพเลอร์ 4.2 และ 5.0 หรือใหม่กว่า "
มีการกำหนดการใช้งาน เพียง แต่sizeof(char)
เป็น1
โดยมาตรฐาน
CHAR_BIT
กำหนดในclimits
.
ดู 5.3.3 ย่อหน้า 1:
[หมายเหตุ: โดยเฉพาะ sizeof (bool) และ sizeof (wchar_t) ได้รับการกำหนดการใช้งาน 69)]
bool
?