【发布时间】:2012-02-27 09:10:04
【问题描述】:
我通过这个问题了解了 static_cast 的工作原理。 Why is it important to use static_cast instead of reinterpret_cast here?
但是如果 static_cast 确实知道类的继承关系,那么 dynamic_cast 为什么存在呢?我们什么时候必须使用 dynamic_cast?
【问题讨论】:
-
我忘记了细节,但请注意您的
static_cast示例不涉及虚拟。dynamic_cast专门用于虚拟向下转换。 -
@Pubby 是的。但是即使示例有一个虚拟方法,static_cast 也可以正常工作,是我误解了吗?
-
Any 类型的转换在 C++ 中应该是一种罕见的事件,动态转换可能是其中最罕见的事件之一,但与大多数神秘的 C++ 功能一样,当您需要它,你真的需要它。
-
它与虚方法没有任何关系。您有一个指向派生类对象的 Base* 指针。并且喜欢访问该派生类的成员。需要强制转换,但是您如何知道强制转换是有效的以及对象实际上 是预期的派生类类型? dynamic_cast 告诉你,必须启用 RTTI。
标签: c++ casting dynamic-cast static-cast