Dokładne aliasing C ++, gdy nie jest używany wskaźnik zwrócony przez umieszczenie nowego
Czy może to potencjalnie powodować niezdefiniowane zachowanie?
uint8_t storage[4];
// We assume storage is properly aligned here.
int32_t* intPtr = new((void*)storage) int32_t(4);
// I know this is ok:
int32_t value1 = *intPtr;
*intPtr = 5;
// But can one of the following cause UB?
int32_t value2 = reinterpret_cast<int32_t*>(storage)[0];
reinterpret_cast<int32_t*>(storage)[0] = 5;
char
ma specjalne zasady dla ścisłego aliasingu. Jeśli używamchar
zamiastuint8_t
czy to nadal Niezdefiniowane Zachowanie? Co jeszcze się zmienia?
Jak zauważył członek DeadMG,reinterpret_cast
zależy od implementacji. Jeśli używam obsady w stylu C(int32_t*)storage
zamiast tego co by się zmieniło?