¿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?

Respuestas a la pregunta(7)

Su respuesta a la pregunta