In C ++, mi chiedo perché il tipo bool sia lungo 8 bit (sul mio sistema), dove è sufficiente solo un bit per contenere il valore booleano?
Credevo fosse per motivi di prestazioni, ma poi su una macchina a 32 o 64 bit, dove i registri sono larghi 32 o 64 bit, qual è il vantaggio in termini di prestazioni?
O è solo una di queste ragioni "storiche"?
sizeof(bool)
sarebbe 4. Potrei giurare che msvc avesse bool a 32 bit, ma ho appena provato e non lo fa.
vector<bool>
non è che cerca di essere intelligente e impacca i bool in pezzi, ma che cerca di farlo e si maschera da contenitore STL . Un semplice bitset andrebbe bene purché non pretenda di essere anche un contenitore STL.
bool
tipo di dati C ++ con il BOOL
tipo di Windows a cui è stato digitato long
. Quindi sizeof(bool) != sizeof(BOOL)
, che sono sicuro provoca molta confusione (e probabilmente un discreto numero di bug). Soprattutto perché ci sono anche boolean
e BOOLEAN
typedefs in Windows, che sono alias per unsigned char
. Inoltre, nota che mentre è comune bool
essere 1 byte, lo standard C ++ ha una nota che indica specificamente che sizeof(bool)
può essere più grande.