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

questionAnswers(7)

yourAnswerToTheQuestion