我对动态转换、typeid() 和模板有一些疑问
1)为什么 typeid 不需要 RTTI ?
2) 多态类型的dynamic_cast:
当我使用 RTTI 进行向下转换(Base to Derive)时 - 编译通过
当 RTTI 关闭时 - 我收到警告(警告 C4541: 'dynamic_cast' 用于带有 /GR- 的多态类型'CBase';可能会导致不可预测的行为)
- 当我进行向上转换(派生到基础)时,无论是否使用 RTTI - 编译都会顺利通过
我不明白为什么当我进行向上转换并且 RTTI 关闭时 - 我没有收到任何警告/错误!
3) 非多态类型的 dynamic_cast:
- 当我使用或不使用 RTTI 进行向下转换时 - 编译失败(错误 C2683:'dynamic_cast':'CBase' 不是多态类型)
但
- 当我在有或没有 RTTI 的情况下进行向上转换时 - 编译顺利通过。
如何在没有 RTTI 的非多态类型通行证上向上转换?
4) 模板函数前面的'inline' 是否有任何影响,即当编译器编译该函数并看到它是'inline' 时,它实际上会将函数视为inline 还是被忽略?
非常感谢大卫的帮助