Nie mogę znaleźć odpowiedzi w standardowej dokumentacji. Czy standard języka C ++ wymaga, sizeof(bool)
aby zawsze wynosić 1 (dla 1 bajtu), czy ten rozmiar jest zdefiniowany w ramach implementacji?
c++
boolean
sizeof
implementation-defined-behavior
0xbadf00d
źródło
źródło
bool
?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 ”.
źródło
Jest zdefiniowana implementacja. Tylko
sizeof(char)
jest1
w normie.źródło
CHAR_BIT
, zdefiniowana wclimits
.Patrz 5.3.3 akapit 1:
źródło