Я вообще избегаю типов литья, насколько это возможно, так как у меня создается впечатление, что это плохое кодирование и может привести к снижению производительности.
Но если кто-то попросил меня объяснить, почему именно это, я бы, вероятно, посмотрел на них как олень в фарах.
Так почему/когда бросает плохо?
Является ли он общим для java, С#, С++ или использует ли каждая среда среды выполнения на нем собственные термины?
Особенности для любого языка приветствуются, например, почему это плохо в С++?