Risposte:
sizeof(bool)
l'implementazione è definita e lo standard pone un notevole accento su questo fatto.
§5.3.3 / 1, abbreviato:
sizeof(char)
,sizeof(signed char)
Esizeof(unsigned char)
sono 1; il risultato dell'applicazionesizeof
a qualsiasi altro tipo fondamentale è definito dall'implementazione. [Nota: in particolare,sizeof(bool)
esizeof(wchar_t)
sono definiti dall'implementazione. 69) ]
Nota 69):
sizeof(bool)
non è necessario che sia 1.
http://msdn.microsoft.com/en-us/library/tf4dy80a.aspx
"In Visual C ++ 4.2, i file di intestazione C ++ standard contenevano un typedef che equivaleva a bool con int. In Visual C ++ 5.0 e versioni successive, bool è implementato come un tipo incorporato con una dimensione di 1 byte. Ciò significa che per Visual C ++ 4.2, una chiamata di sizeof (bool) restituisce 4, mentre in Visual C ++ 5.0 e versioni successive, la stessa chiamata restituisce 1. Ciò può causare problemi di danneggiamento della memoria se sono stati definiti membri della struttura di tipo bool in Visual C ++ 4.2 e si combinano oggetti file (OBJ) e / o DLL creati con i compilatori 4.2 e 5.0 o successivi. "
È definita l'implementazione. Solo sizeof(char)
è 1
per lo standard.
CHAR_BIT
, definito in climits
.
bool
?