No encuentro una respuesta en la documentación estándar. ¿Es sizeof(bool)
siempre de 1 byte, o está implementado?¿Está definido sizeof (bool)?
Respuesta
Su implementación está definida, y la norma pone un énfasis notable en dejar eso en claro.
§5.3.3/1, abreviada:
sizeof(char)
,sizeof(signed char)
ysizeof(unsigned char)
son 1; el resultado desizeof
aplicado a cualquier otro tipo fundamental está definido por la implementación. [Nota: en particular,sizeof(bool)
ysizeof(wchar_t)
están definidos por la implementación. 69)]
nota 69):
sizeof(bool)
no está obligado a ser 1.
Su implementación está definida. Solo sizeof(char)
es 1
según el estándar.
pls tenga en cuenta que el 1 en el estándar puede significar 4 bytes. De que cada tipo es un producto de 4. Entonces cuidado que la norma SOLAMENTE define char es el 1, pero no define la medida. – user3063349
1 significa 8 bits o 1 byte en el estándar – paulm
1 byte. El número de bits por byte no está definido por el estándar (debe estar en menos 8 IIRC), pero se puede encontrar en 'CHAR_BIT', definido en' climts'. – peoro
Ver 5.3.3 párrafo 1:
[Nota : en particular, sizeof (bool) y sizeof (wchar_t) son implementación defined.69)]
http://msdn.microsoft.com/en-us/library/tf4dy80a.aspx
"En Visual C++ 4.2, los archivos de cabecera del estándar de C++ contenía un typedef que equipara con bool int. En Visual C++ 5.0 y posterior, bool se implementa como un tipo incorporado con un tamaño de 1 byte. Eso significa que para Visual C++ 4.2, una llamada de sizeof (bool) produce 4, mientras que en Visual C++ 5.0 y posterior, la misma llamada produce 1. Esto puede causar problemas de corrupción de memoria si ha definido miembros de estructura de tipo bool en Visual C++ 4.2 y están mezclando archivos de objeto (OBJ) y/o DLL construidos con los compiladores 4.2 y 5.0 o posterior. "
Usted se da cuenta de que esto está relacionado de alguna manera con la pregunta, pero claramente no es una respuesta, ya que 0xbadf00d preguntó sobre el estándar, no sobre alguna implementación de compilador específica/arbitrariamente seleccionada, ¿verdad? –
@ChristopherCreutzig Es una prueba por contraejemplo. – kinokijuf
@kinokijuf No es un contraejemplo. Hay muchas cosas en Visual C++ que no cumplen con los estándares. – 0xbadf00d
- 1. C++ sizeof con bool
- 2. Comprueba si bool está definido en C/C++
- 3. LNK2005 (ya está definido)
- 4. Objetivo-C: BOOL vs bool
- 5. Operador & = para elementos del vector <bool> ¿no está definido?
- 6. process.env.NODE_ENV no está definido
- 7. sqlconnection no está definido
- 8. ko.mapping no está definido
- 9. chrome.extension.onMessage no está definido
- 10. String.charCode¿No está definido?
- 11. "$ .support no está definido"
- 12. ISODate no está definido
- 13. "document.formName" no está definido?
- 14. sizeof (int) == sizeof (void *)?
- 15. error: identificador "blockIdx" no está definido
- 16. ¿Está definido por mucho tiempo?
- 17. ReferenceError: google no está definido
- 18. backbone view - no está definido
- 19. SignalR: $ .connection no está definido
- 20. ReferenceError: "alerta" no está definido
- 21. ¿Este código está bien definido?
- 22. SignalR $ .connection no está definido
- 23. ¿Este código está bien definido?
- 24. Error: 'jQuery no está definido'
- 25. $ no está definido en iFrame
- 26. ejs 'parcial no está definido'
- 27. 'AjaxControlToolkit' no está definido Error
- 28. el gráfico no está definido
- 29. TypeError: row no está definido
- 30. JavaScript: ¿Está definido un miembro?
+1 para enfatizar el énfasis! –
+1 para la nota al pie que enfatiza el énfasis ;-) – Nawaz
¿Hay una bandera con la que necesito compilar mi programa, que mi compilador usará solo 1 byte para 'bool'? – Eagle