Стоит ли беспокоиться о выравнивании во время приведения указателя?

В моем проекте у нас есть такой код:

// 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));

Я говорил с моим техническим руководителем, что этот код может быть не переносимым, так как он пытаетсяunsigned char* кint* который обычно имеет более строгое требование выравнивания. Но технический лидер говорит, что все в порядке, большинство компиляторов остается неизменным значением указателя после приведения, и я могу просто написать такой код.

Честно говоря, я не совсем уверен. После исследования я обнаружил, что некоторые люди против использования указателей, как указано выше, например,Вот а такжеВот.

Итак, вот мои вопросы:

Действительно ли безопасно разыменовать указатель после приведения в реальном проекте?Есть ли разница между кастингом в стиле C иreinterpret_cast?Есть ли разница между C и C ++?

Ответы на вопрос(7)

Ваш ответ на вопрос