はhereを参照してください:dynamic_castが非多型のアップキャストに使用するのはなぜですか?
のdynamic_castはクラスだけ (またはボイド*)へのポインタと参照を使用することができます。その目的は、 タイプの結果が、宛先の有効な完全オブジェクトを指すようにすることです。 ポインタタイプ。
として暗黙の変換が許可されているのと同じ方法で、これには当然ポインタアップキャスト( からポインタへのポインタからポインタへの変換)が含まれます。
しかしdynamic_castをすることもでき意気消沈( ポインタに由来するからポインタ・ベースの変換)多型クラス(仮想メンバーを有するもの) -andのみ尖った物体IF-の有効完全なオブジェクトである場合 ターゲットタイプ。
non-polymorphic型のアップキャストにはdynamic_castを使用できますが、non-polymorphic型のダウンキャストではもう正しくないのはなぜですか?
私はそれをアップキャスティングに使用することは問題ありません。** ** non ** - polymorphic_タイプ。 –
変換されていない場合は 'null_ptr'を返すので、仮想ディスパッチが必要なのは、変換が良好であることを確認するためです。さもなければ '[expr.dynamic.cast]'はダウンキャストのために多形でなければならないと言います。 – NathanOliver
しかし、なぜ "多形性クラス"がダウンキャストのみについて輪郭を描かれているのですか? – Narek