珍しくがっつりC++の話。
C++について勉強していて、未だにstatic_castとdynamic_castの挙動をよくわかってない感じだったので、実験して確認したことをまとめます。文章にするとめちゃ時間かかりますね・・・。
まず前提知識として、メモリレイアウトやらvtableやらRTTIやらの話をします。何故なら、おそらく多くの人がなんとなく以下の理解でいると思われ、その辺どうなっているかという話から始めないといけないためです。
- dynamic_castは実行時に型チェックするから安全にダウンキャストできる。
- static_castはコンパイル時に型チェックするが実行時に型チェックしないためダウンキャストが安全でない。
間違っちゃないんですが、もう少し突っ込んで理解して、正しい挙動を把握したいわけです。
とはいえ、私もオフィシャルなドキュメントを読んでいたりするわけではないので、ここに書くことも間違ってるかもという疑いを持って読んでください。間違ってたら指摘欲しいです。
特に断りがない限り、Visual Studio 2015でx86としてDebugビルドしてます。基本的にpublic継承の話しかしません。