¿Cuándo y cómo se permite la conversión a puntero char?
Podemos ver la representación de un objeto de tipo.T
convirtiendo unT*
que apunta a ese objeto en unachar*
. Al menos en la práctica:
int x = 511;
unsigned char* cp = (unsigned char*)&x;
std::cout << std::hex << std::setfill('0');
for (int i = 0; i < sizeof(int); i++) {
std::cout << std::setw(2) << (int)cp[i] << ' ';
}
Esto produce la representación de511
en mi sistema:ff 01 00 00
.
Hay (seguramente) algún comportamiento definido de implementación que ocurre aquí. ¿Cuál de los lanzamientos me está permitiendo convertir unint*
a unaunsigned char*
¿Y qué conversiones implica ese reparto? ¿Estoy invocando un comportamiento indefinido tan pronto como lance? Puedo lanzar cualquierT*
tipo como este? ¿En qué puedo confiar al hacer esto?