Trong C ++, tôi tự hỏi tại sao loại bool dài 8 bit (trên hệ thống của tôi), trong đó chỉ một bit là đủ để giữ giá trị boolean?
Tôi đã từng tin rằng đó là vì lý do hiệu năng, nhưng sau đó trên máy 32 bit hoặc 64 bit, trong đó các thanh ghi rộng 32 hoặc 64 bit, lợi thế về hiệu suất là gì?
Hay đó chỉ là một trong những lý do 'lịch sử' này?
sizeof(bool)sẽ là 4. Tôi có thể thề rằng msvc có các công cụ 32 bit, nhưng tôi chỉ thử và không được.
vector<bool>không phải là nó cố tỏ ra thông minh và đóng gói các bool thành bit, mà là nó cố gắng làm điều này và ngụy trang thành một container STL . Một bitet đơn giản sẽ ổn miễn là nó không giả vờ là một container STL.
boolkiểu dữ liệu C ++ với BOOLkiểu Windows được nhập vào long. Vì vậy sizeof(bool) != sizeof(BOOL), điều mà tôi chắc chắn gây ra nhiều nhầm lẫn (và có thể là một số lỗi khá lớn). Đặc biệt vì cũng có booleanvà BOOLEANtypedefs trong Windows, đó là bí danh cho unsigned char. Ngoài ra, lưu ý rằng mặc dù thông thường boollà 1 byte, tiêu chuẩn C ++ có một lưu ý chỉ ra cụ sizeof(bool)thể có thể lớn hơn.