一部のタイプのキャスティングは非常に安全で効率的であるため、キャスティングとはまったく見なされないこともあります。
派生型から基本型にキャストする場合、これは一般に非常に安価であり(多くの場合-言語、実装およびその他の要因に応じて-コストはかかりません)、安全です。
intのような単純な型からlong intのような幅の広い型にキャストする場合も、たいていは非常に安く(一般に、キャストと同じ型を割り当てるよりもそれほど高価ではありません)、再び安全です。
他のタイプは、より複雑であるか、より高価です。ほとんどの言語では、基本型から派生型へのキャストは安価ですが、重大なエラーのリスクが高くなります(C ++では、baseから派生へのstatic_castは安価ですが、基になる値が派生型ではない場合、動作は定義されておらず、非常に奇妙な場合があります)または比較的高価であり、例外が発生するリスクがあります(C ++ではdynamic_cast、C#ではベースから派生への明示的なキャストなど)。JavaとC#でのボクシングは、これのもう1つの例であり、さらに大きな費用がかかります(基礎となる値がどのように処理されるか以上に変化していると考えてください)。
他のタイプのキャストは情報を失う可能性があります(長整数型から短整数型へ)。
これらのリスク(例外またはより深刻なエラーのいずれか)および費用のケースはすべて、キャストを回避する理由です。
より概念的ですが、おそらくより重要な理由は、キャストの各ケースが、コードの正確さについて推論する能力が損なわれるケースであることです。各ケースは、何かがうまくいかない可能性がある別の場所と、それがどのようにして行われるかですシステム全体で問題が発生するかどうかを推測する複雑さが増すため、問題が発生する可能性があります。キャストが毎回安全であると証明できたとしても、これを証明することは推論の余分な部分です。
最後に、キャストの頻繁な使用は、オブジェクトモデルの作成時、使用時、またはその両方でオブジェクトモデルを適切に検討できないことを示している可能性があります。同じ少数のタイプ間で頻繁にキャストを繰り返すと、ほとんどの場合、タイプ間の関係を検討できません。中古。ここでは、キャストが悪いことはそれほど多くありません。キャストは何か悪い兆候であるためです。