我想从上层指针转换为较低类,即从基类指针转换为派生类指针。
我应该使用“Dynamic_cast”还是“reinterpret_cast”?请指教我
答案 0 :(得分:11)
请勿使用reinterpret_cast
- 使用static_cast
或dynamic_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异常来执行运行时类型检查。