为什么存在dynamic_cast?
我了解了 static_cast 如何进行通过这个问题起作用。 为什么它很重要在这里使用static_cast而不是reinterpret_cast?
但是如果static_cast确实知道类的继承关系,为什么还有dynamic_cast存在呢?什么时候我们必须使用dynamic_cast?
Possible Duplicate:
Regular cast vs. static_cast vs. dynamic_cast
I learned how static_cast works by this question.
Why is it important to use static_cast instead of reinterpret_cast here?
But if static_cast does knows classes' inheritance-relationship, why does dynamic_cast exist? And when do we must use dynamic_cast?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我将发布一个简单的示例来说明它们的不同之处:
如果我理解正确的话,
static_cast
只知道它要转换为的类型。另一方面,dynamic_cast
知道要强制转换的类型以及要强制转换的类型。I'll post a simple example of how they differ:
If I understand correctly,
static_cast
only knows the type it's casting to.dynamic_cast
on the other hand knows type being cast, along with the type being cast to.如果类型是指针,则如果无法进行强制转换,
dynamic_cast
将返回 NULL(如果类型是引用类型,则抛出异常)。因此,dynamic_cast
可用于检查对象是否属于给定类型,而static_cast
则不能(您最终会得到一个无效值)。此外,在某些情况下
static_cast
是不可能的,例如多重继承:dynamic_cast
returns NULL if the cast is impossible if the type is a pointer (throws exception if the type is a reference type). Hence,dynamic_cast
can be used to check if an object is of a given type,static_cast
cannot (you will simply end up with an invalid value).Also, in some cases
static_cast
is not possible, e.g. with multiple inheritance: