¿Puede un simple 'char' posiblemente tener valores de trampa?
LÉAME
A "valor de la trampa"o"representación de trampa" para tipoT
, es una combinación de bits (del almacenamiento subyacente) que produce un valor no válido deT.
Intentar interpretar la representación de un valor no válido provocarácomportamiento indefinido.
Otropregunta ha comenzado una acalorada discusión sobrechar
, y la posibilidad de una implementación que tengarepresentaciones de trampa para ello.
Pregunta:
latachar
posiblemente tenga valores de trampa?Citas que se han mencionado en la discusión anterior:Estas secciones son las más citadas durante la argumentación anterior, ¿son contradictorias?
3.9.1p1
Tipos fundamentales [basic.fundamental]
Se define la implementación si unchar
Puede contener valores negativos. Los caracteres pueden declararse explícitamentesigned
ounsigned
.
A char,
a signed char,
y ununsigned char
ocupar la misma cantidad de almacenamiento y tener los mismos requisitos de alineación (3.11); es decir, tienen la misma representación de objeto. Para los tipos de caracteres, todos los bits de la representación del objeto participan en la representación del valor.
Para los tipos de caracteres sin signo, todos los patrones de bits posibles de la representación del valor representan números. Estos requisitos no son válidos para otros tipos.
En cualquier implementación particular, un simplechar
el objeto puede tomar los mismos valores que unsigned char
o ununsigned char;
cuál está definido por la implementación.
3.9p2Tipos [basic.types]
Para cualquier objeto (que no sea un subobjeto de clase base) de tipo trivialmente copiableT,
si el objeto tiene o no un valor válido de tipoT
, los bytes subyacentes (1.7) que componen el objeto se pueden copiar en una matriz dechar
ounsigned char.
Si el contenido de la matriz dechar
ounsigned char
se copia nuevamente en el objeto, el objeto posteriormente mantendrá su valor original.