Согласно type aliasing rules, я предполагаю, что:reinterpret_cast преобразования цепи правильность
1) прямое преобразование uint64_t*
в uint32_t*
- это неправильно (я не могу получить доступ к данным через результат PTR и убедитесь, что я. получите правильное значение)
цепи 2) преобразования является OK (я могу безопасно получить доступ к данным)
uint64_t* -> unsigned char* -> uint32_t*
uint64_t* -> void* -> uint32_t*
Я правильно понимаю правила или нет?
Я всегда предпочитаю использовать союз s вместо этого, чтобы предотвратить возможные ptr. (что может привести к повреждению данных), но это не всегда возможно (и хорошо) решение.
Нет, переинтерпретация указателя char в качестве указателя на тип, который не является фактическим типом, является UB, поэтому ваша цепочка не работает. –
Также использование союза для достижения того же результата (ов) является UB. –
Странно, что раздел cppreference [Type aliasing] (http://en.cppreference.com/w/cpp/language/reinterpret_cast#Type_aliasing) говорит только о полиморфных объектах. –