It's not that reinterpret_cast is unportable, but it's more that it's extremely dangerous. It's the equivalent of the old-school C style cast, and it basically does a direct byte copy without any regard to type checking or so on.
So yes, to convert between static base types (ie, double <-> float), you'd always use static cast, and to go up or down a class hierarchy, you'd use the dynamic cast. But if you find yourself needing reinterpret_cast, you generally should re-think the code you're about to write. Granted, there are cases where you'll need it, but it should be used exceedingly carefully and rarely.
Edit: Also, you might find this SO question to be helpful