Respostas:
sizeof(bool)
é a implementação definida, e o padrão enfatiza este fato.
§5.3.3 / 1, resumido:
sizeof(char)
,sizeof(signed char)
esizeof(unsigned char)
são 1; o resultado desizeof
aplicado a qualquer outro tipo fundamental é definido pela implementação. [Nota: em particular,sizeof(bool)
esizeof(wchar_t)
são definidos pela implementação. 69) ]
Nota de rodapé 69):
sizeof(bool)
não precisa ser 1.
http://msdn.microsoft.com/en-us/library/tf4dy80a.aspx
"No Visual C ++ 4.2, os arquivos de cabeçalho C ++ Padrão continham um typedef que equivalia a bool com int. No Visual C ++ 5.0 e posterior, bool é implementado como um tipo interno com um tamanho de 1 byte. Isso significa que para Visual C ++ 4.2, uma chamada de sizeof (bool) produz 4, enquanto no Visual C ++ 5.0 e posterior, a mesma chamada produz 1. Isso pode causar problemas de corrupção de memória se você tiver definido membros de estrutura do tipo bool no Visual C ++ 4.2 e estiver misturando objeto arquivos (OBJ) e / ou DLLs criados com os compiladores 4.2 e 5.0 ou posteriores. "
Sua implementação está definida. Só sizeof(char)
é 1
pelo padrão.
CHAR_BIT
, definido em climits
.
bool
?