Devo me preocupar com o alinhamento durante o lançamento do ponteiro?
No meu projeto, temos um pedaço de código como este:
// raw data consists of 4 ints
unsigned char data[16];
int i1, i2, i3, i4;
i1 = *((int*)data);
i2 = *((int*)(data + 4));
i3 = *((int*)(data + 8));
i4 = *((int*)(data + 12));
Eu falei com meu líder técnico que este código pode não ser portátil, já que ele está tentando lançar umunsigned char*
para umint*
que geralmente tem um requisito de alinhamento mais rigoroso. Mas o líder de tecnologia diz que está tudo bem, a maioria dos compiladores continua com o mesmo valor de ponteiro após o lançamento, e eu posso simplesmente escrever o código assim.
Para ser franco, não estou realmente convencido. Depois de pesquisar, encontro algumas pessoas contra o uso de fundições de ponteiro, como acima, por exemplo,Aqui eAqui.
Então, aqui estão as minhas questões:
É realmente seguro excluir o ponteiro depois de lançar um projeto real?Existe alguma diferença entre o estilo C ereinterpret_cast
?Existe alguma diferença entre C e C ++?