哪种铸造技术更适合在C ++中从上层铸造到下层铸造

时间:2010-05-03 12:59:34

标签: c++ polymorphism casting

我想从上层指针转换为较低类,即从基类指针转换为派生类指针。

我应该使用“Dynamic_cast”还是“reinterpret_cast”?请指教我

4 个答案:

答案 0 :(得分:11)

请勿使用reinterpret_cast - 使用static_castdynamic_cast。如果您确定指针与该派生类对象完全相同,则使用static_cast,否则使用dynamic_cast(这将要求基类是多态的)并检查结果以确保指针是确实是你想要的课程。

答案 1 :(得分:7)

这取决于你对指针的了解。

如果您知道确定您所拥有的指针属于子类型,则可以static_cast<>安全地使用它。

如果您不确定,请使用dynamic_cast<>,但这样做有成本且速度较慢。

答案 2 :(得分:2)

的reinterpret_cast&LT;&GT;是最后的手段,应该避免。

在Qt中,如果在QObject之间进行投射,请使用qobject_cast&lt;&gt;。它在语义上与dynamic_cast类似,但在dll边界等方面没有问题。

答案 3 :(得分:0)

添加到Ereon的答案:如果您不知道该类型,请使用dynamic_cast通过捕获bad_cast异常来执行运行时类型检查。