Nota: questa domanda è stata rinominata e ridotta per renderla più mirata e leggibile. La maggior parte dei commenti si riferisce al vecchio testo.
Secondo lo standard, oggetti di diverso tipo potrebbero non condividere la stessa posizione di memoria. Quindi questo non sarebbe legale:
std::array shorts; int* i = reinterpret_cast(shorts.data()); // Not OK
Lo standard, tuttavia, consente un’eccezione a questa regola: a qualsiasi object è ansible accedere tramite un puntatore al char
o al char
unsigned char
:
int i = 0; char * c = reinterpret_cast(&i); // OK
Tuttavia, non è chiaro per me se sia permesso anche il contrario. Per esempio:
char * c = read_socket(...); unsigned * u = reinterpret_cast(c); // huh?