【发布时间】:2012-10-01 16:32:01
【问题描述】:
我想知道什么时候 dynamic_cast 必须或应该在 static_cast 上使用,并附有示例。我读过this SO question,但它并没有真正提供任何具体的例子。我假设大多数示例将涉及多态类类型。目前我知道在 static_cast 上使用 dynamic_cast 的唯一原因是如果我不能 100% 确定我正在使用的具体类型。
其他一些想法:
- 横向转换(在多重继承中)
- 在虚拟继承层次结构中转换为基类
- 在使用多重继承的类中强制转换为“最右边”的继承类型时,指针是否会改变(如果使用 static_cast)?
“如果类型未知”的原因是唯一的原因吗?如果没有,有人可以提供示例来说明为什么必须或应该使用 dynamic_cast 而不是 static_cast?
【问题讨论】:
-
AFAIK
dynamic_cast仅用于从基类转换为派生类,并且基类必须至少具有一个虚函数。在几乎所有其他情况下,您都需要static_cast