実行コスト
たしかにdynamic_castは高コストな変換と言われるがdynamic_castを使わなくとも仮想関数を呼び出す時には内部で同じRTTIに基づく変換は行われる.
その必要な時間もせいぜいstaticの数倍から数十倍であり,GUI等のイベントやその他の処理と比べると微々たるものであり,それほど考慮すべきことではないだろう.
むしろ,組み込み等,dynamic_castの実行コストが気になるのであれば,Cなどの非オブジェクト指向な言語を使用すべきである.
プログラミングのコスト
もう一つ重要なコストが,いかにバグを減らし可読性・保守性のよいコーディングを行うかという点である.
若干の実行速度を犠牲にしてもそれは大きな価値がある.
その恩恵の最たるものは,新たな機能を持った派生クラスを作成した際に,それを使用するクラスの変更を要求しないことが挙げられる.
例えば図形クラスと描画クラスによるDoc-View構造のソフトウェアを考える.
初期は円と四角形のみの図形クラスであったが,新たに三角形を追加するとしよう.
その時,描画クラスにおいても複数箇所の変更・追記をしなければならないとすると,それは大きなコストと言える.
どのような図形であろうと基本クラスShapeが描画に必要な全ての情報を取得するためのインターフェイスを持っていれば,
描画クラスを変更する必要はない.
一方,各図形固有のパラメータ(半径や辺の長さ,角度など)をGUIから変更したい場合には,各派生クラス固有の関数を使うことになる.
対象が具体的に何かを知らなければどのようなパラメータが操作可能か不明であるため,dynamic_castを用いればよい.
ただし,それが本当に派生クラス固有とすべき機能であるかは十分に検討すべきである.