Câu trả lời:
sizeof(bool)
việc thực hiện được xác định, và tiêu chuẩn nhấn mạnh đáng chú ý đến thực tế này.
§5.3.3 / 1, được rút gọn:
sizeof(char)
,sizeof(signed char)
vàsizeof(unsigned char)
là 1; kết quả của việcsizeof
áp dụng cho bất kỳ kiểu cơ bản nào khác là do việc triển khai xác định. [Lưu ý: cụ thểsizeof(bool)
vàsizeof(wchar_t)
được xác định bởi việc triển khai. 69) ]
Chú thích chân trang 69):
sizeof(bool)
không bắt buộc phải là 1.
http://msdn.microsoft.com/en-us/library/tf4dy80a.aspx
"Trong Visual C ++ 4.2, các tệp tiêu đề C ++ tiêu chuẩn chứa một typedef tương đương với bool với int. Trong Visual C ++ 5.0 trở lên, bool được triển khai dưới dạng kiểu tích hợp với kích thước 1 byte. Điều đó có nghĩa là đối với Visual C ++ 4.2, lệnh gọi sizeof (bool) cho kết quả 4, trong khi trong Visual C ++ 5.0 trở lên, lệnh gọi tương tự cho kết quả 1. Điều này có thể gây ra vấn đề hỏng bộ nhớ nếu bạn đã xác định cấu trúc thành viên kiểu bool trong Visual C ++ 4.2 và đang trộn đối tượng tệp (OBJ) và / hoặc DLL được xây dựng bằng trình biên dịch 4.2 và 5.0 trở lên. "
Việc triển khai nó được xác định. Chỉ sizeof(char)
là 1
theo tiêu chuẩn.
CHAR_BIT
, được xác định trong climits
.
bool
không?