Существует ряд вопросов относительно перекрестного преобразования (приведение от T1*
к несвязанному T2*
), например this и это. Обычно ответ звучит так: reinterpret_cast
определяется реализацией, и преобразование в void*
, за которым следует static_cast
, четко определено. Однако я не видел реальных примеров того, что может пойти не так при использовании reinterpret_cast
.
Каковы реальные примеры, когда приведение через void*
работает, а reinterpret_cast
- нет?
reinterpret_cast
доchar*
на самом деле было четко определено (но не указано, да). И это, кроме того, приведение кvoid*
с последующим приведением к неопределенному типу не определено.void*
следует использовать только для стирания и восстановления того же типа. (См. Также комментарий Йоханнеса к ответу Павла, в котором говорится примерно то же самое, только более строго.) - person Konrad Rudolph   schedule 06.07.2011reinterpret_cast
есть место для нежелательного поведения, и я хотел узнать о реальных примерах, если таковые имеются. Вы просто говорите, что он будет работать, даже не пытаясь перечислить системы, на которых он будет работать. Что, если он не работает со встроенным компилятором C ++, который используется в пылесосе, который я куплю завтра? - person sharptooth   schedule 13.12.2011reinterpret_cast
есть место для нежелательного поведения. Как я уже говорил, этот ответ неверен. Стандарт не может определить ни одну из форм, но нет сомнений в том, что цель состоит в том, чтобы обе были четко определены. Вы просто говорите, что он будет работать, даже не пытаясь перечислить системы, на которых он будет работать. Это работает, и все. Это просто так. Повсюду. - person curiousguy   schedule 13.12.2011