Type casting can also be an indication of a flaw design or misunderstanding of a design.
For example, I've see a lot of SFML users cast mouse cursor positions (int) to world coordinates (float), because they want to compare/use the two. What those users don't realize is that the world coordinates can change at any moment, when the view is adjusted.
The solution instead should be to use the dedicated casting methods mapPixelToCoords or mapCoordsToPixel if you go the other way around.
Additionally, there's also sometimes a better way to "cast", by using explicitly defined constructors.
For example, if you want to cast two integers to a sf::Vector2f (where f stands for float), you could cast the two values to float, or you could construct a sf::Vector2i with the two integers and pass that to the sf::Vector2f constructor instead, which will then take care of the conversion.
Unless you use C-style casts (e.g. (int)2.5f) and stick to static_cast you won't really run into risky situations. The only thing that could go wrong, is that you lose precision.
When it comes to reintepret_cast or even worse dynamic_cast you have to be much more careful on what you do and when you use them.