我想知道在什么情况下必须或应该使用dynamic_cast而不是static_cast,同时需要提供示例。我已经阅读了this SO question,但它并没有提供任何具体的示例。我假设大多数示例将涉及多态类类型。目前我知道使用dynamic_cast而不是static_cast的唯一原因是我不确定我正在使用的具体类型。
其他想法:
- 侧向转换(在多重继承中) - 在虚拟继承层次结构中向上转换到基类 - 当在使用多重继承的类中向“最右边”的继承类型进行转换时,指针是否会更改(如果使用static_cast)?
“如果类型未知”是唯一的原因吗?如果不是,能否提供示例,以证明为什么必须或应该使用dynamic_cast而不是static_cast?
其他想法:
- 侧向转换(在多重继承中) - 在虚拟继承层次结构中向上转换到基类 - 当在使用多重继承的类中向“最右边”的继承类型进行转换时,指针是否会更改(如果使用static_cast)?
“如果类型未知”是唯一的原因吗?如果不是,能否提供示例,以证明为什么必须或应该使用dynamic_cast而不是static_cast?
dynamic_cast
仅用于从基类向派生类的转换,并且基类必须至少有一个虚函数。在几乎所有其他情况下,您都应该使用static_cast
。 - Mooing Duck