Стоит ли беспокоиться о выравнивании во время приведения указателя?
В моем проекте у нас есть такой код:
// 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 ++?