Quando e como a conversão para o ponteiro de caracteres é permitida?
Podemos olhar para a representação de um objeto do tipoT
convertendo umT*
que aponta para esse objeto em umchar*
. Pelo menos na prática:
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] << ' ';
}
Isso produz a representação de511
no meu sistema:ff 01 00 00
.
Há (certamente) algum comportamento definido pela implementação que ocorre aqui. Qual dos elencos está me permitindo converter umint*
para umunsigned char*
e quais conversões isso envolve? Estou invocando comportamento indefinido assim que eu lancei? Posso conjurar qualquerT*
tipo assim? O que posso confiar ao fazer isso?