Odpowiedzi:
sizeof(bool)
jest zdefiniowana implementacja, a norma kładzie szczególny nacisk na ten fakt.
§5.3.3 / 1, w skrócie:
sizeof(char)
,sizeof(signed char)
Isizeof(unsigned char)
to 1; wyniksizeof
zastosowania do dowolnego innego typu podstawowego jest zdefiniowany w ramach implementacji. [Uwaga: w szczególnościsizeof(bool)
isizeof(wchar_t)
są zdefiniowane w ramach implementacji. 69) ]
Przypis 69):
sizeof(bool)
nie musi być 1.
http://msdn.microsoft.com/en-us/library/tf4dy80a.aspx
„W programie Visual C ++ 4.2 standardowe pliki nagłówkowe C ++ zawierały definicję typu, która zrównała bool z int. W Visual C ++ 5.0 i nowszych, bool jest zaimplementowany jako typ wbudowany o rozmiarze 1 bajtu. Oznacza to, że dla Visual C ++ 4.2, wywołanie sizeof (bool) daje 4, podczas gdy w Visual C ++ 5.0 i nowszych to samo wywołanie daje 1. Może to powodować problemy z uszkodzeniem pamięci, jeśli masz zdefiniowane składowe struktury typu bool w Visual C ++ 4.2 i mieszasz obiekt pliki (OBJ) i / lub biblioteki DLL utworzone za pomocą kompilatorów w wersji 4.2 i 5.0 lub nowszej ”.
Jest zdefiniowana implementacja. Tylko sizeof(char)
jest 1
w normie.
CHAR_BIT
, zdefiniowana w climits
.
bool
?