Reinterpret_cast nunca devolverá una dirección diferente - se requiere copiar la dirección exacta.
En los casos de herencia múltiple, como dijo David Rodríguez, tomar la dirección de una de las bases puede devolver una dirección que tiene un desplazamiento a la dirección de la primera base. Reinterpret_cast devolverá esa dirección de desplazamiento, pero si la trata como la dirección actualizada, se producirá el infierno.
Para el upcasting, static_cast puede devolver una dirección diferente a la dada. Si la dirección que tiene es una de las bases, y esa dirección está siendo compensada con la dirección de la primera base, static_cast devolverá una dirección válida para el objeto presentado, que es igual a la dirección de la primera base y por lo tanto no igual al puntero pasado.
Para resumir: reinterpret_cast te da la misma dirección, siempre. Static_cast y dynamic_cast pueden devolver una dirección diferente, p. en ciertos casos que involucran herencia múltiple.
La diferencia entre static_cast y dynamic_cast es que static_cast no verifica si el puntero que le da es el objeto correcto para el molde, así que asegúrese de eso antes de llamarlo.
quieres decir, "cambia el valor" al que apunta el puntero? – akira
@akira: no, cambia el valor del puntero en sí – sharptooth
quieres decir como: 'T * t = 0x13; Q * q = 0x42; t = reintrepret_cast