Dans mon projet, nous avons un morceau de code comme ceci:
// 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));
J'en ai parlé à mon tech responsable que ce code peut ne pas être portable car il est en train de jeter un unsigned char*
d'un int*
qui a généralement une plus strict alignement exigence. Mais tech lead dit, c'est tout droit, la plupart des compilateurs reste la même valeur du pointeur après la coulée, et je peux juste écrire le code comme ceci.
Pour être franc, je ne suis pas vraiment convaincu. Après des recherches, j'ai trouver quelques personnes à l'encontre de l'utilisation de pointeur de castings, comme ci-dessus, par exemple, ici et ici.
Voici donc mes questions:
- Est-il VRAIMENT sûr de déréférencer le pointeur après la coulée dans un projet immobilier?
- Quelle est la différence entre C-style coulée et
reinterpret_cast
? - Quelle est la différence entre le C et le C++?