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.
bool
kiểu dữ liệu C ++ với BOOL
kiể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ó boolean
và BOOLEAN
typedefs trong Windows, đó là bí danh cho unsigned char
. Ngoài ra, lưu ý rằng mặc dù thông thường bool
là 1 byte, tiêu chuẩn C ++ có một lưu ý chỉ ra cụ sizeof(bool)
thể có thể lớn hơn.