Striktes C ++ - Aliasing, wenn kein Zeiger verwendet wird, der durch Platzierung neu zurückgegeben wurde

Kann dies möglicherweise undefiniertes Verhalten verursachen?

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 hat spezielle Regeln für das Strict-Aliasing. Wenn ich benutzechar Anstatt vonuint8_t ist es immer noch undefiniertes Verhalten? Was ändert sich sonst noch?

Als Mitglied wies DeadMG darauf hin,reinterpret_cast ist implementierungsabhängig. Wenn ich eine C-Besetzung verwende(int32_t*)storage Was würde sich stattdessen ändern?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage