動的キャスト 、 typeid() 、およびテンプレートに関していくつか質問があります
1) なぜ typeid は RTTI を必要としないのですか?
2) ポリモーフィック型の dynamic_cast:
RTTI でダウンキャスト (ベースから派生) を行うと、コンパイルがパスします
RTTI がオフの場合 - 警告が表示されます (警告 C4541: 'dynamic_cast' used on polymorphic type 'CBase' with /GR-; unpredictable behavior may result)
- アップキャスト (ベースへの派生) を行う場合、RTTI の有無にかかわらず - コンパイルはスムーズに行われます
私が理解していないのは、アップキャストを実行し、RTTI がオフになっていると、警告/エラーが表示されない理由です!
3) NON ポリモーフィック型の dynamic_cast:
- RTTI の有無にかかわらずダウンキャストを行うと、コンパイルが失敗します (エラー C2683: 'dynamic_cast' : 'CBase' はポリモーフィック型ではありません)
しかし
- RTTI の有無にかかわらずアップキャストを行うと、コンパイルはスムーズに行われます。
RTTI なしで NON ポリモーフィック タイプ パスのアップキャストが発生するのはなぜですか?
4) テンプレート関数の前にある「インライン」には何らかの効果がありますか? つまり、コンパイラが関数をコンパイルして「インライン」であると判断した場合、関数は実際にはインラインとして扱われますか、それとも無視されますか?
デビッドを助けてくれてどうもありがとう