Строгий псевдоним C ++, когда не используется указатель, возвращаемый путем размещения

Может ли это привести к неопределенному поведению?

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 есть специальные правила для строгого алиасинга. Если я используюchar вместоuint8_t это все еще неопределенное поведение? Что еще меняется?

Как отметил член DeadMG,reinterpret_cast зависит от реализации. Если я использую бросок в стиле C(int32_t*)storage вместо этого, что изменится?

Ответы на вопрос(2)

Ваш ответ на вопрос