Reinterpret_cast никогда не будет возвращать другой адрес - требуется скопировать точный адрес.
В случаях множественного наследования, например, Дэвид Родригес сказал, что, взяв адрес одной из баз, может вернуть адрес, который имеет смещение по адресу первой базы. Reinterpret_cast вернет этот адрес смещения, но если вы будете рассматривать его как адрес upcast, произойдет ад.
Для повышения эффективности static_cast может возвращать другой адрес, отличный от указанного. Если адрес, который у вас есть, является одним из оснований, и этот адрес находится на смещении к первому базовому адресу, static_cast вернет действительный адрес для объекта с повышением уровня, который равен адресу первой базы и, следовательно, не равен к указателю.
Чтобы сделать это коротко: reinterpret_cast дает вам тот же адрес, всегда. Static_cast и dynamic_cast могут возвращать другой адрес, например. в некоторых случаях с множественным наследованием.
Разница между static_cast и dynamic_cast заключается в том, что static_cast не проверяет, является ли указатель, который вы ему указываете, правильным объектом для трансляции, поэтому обязательно перед этим вызовите его.
Вы имеете в виду, что «изменяет значение» указывает указатель? – akira
@akira: no, изменяет значение самого указателя – sharptooth
вы имеете в виду: 'T * t = 0x13; Q * q = 0x42; t = reintrepret_cast