如果我有一个动态强制转换,其中参数与指定的指针类型不同,这是什么意思? E.g:
X* x = dynamic_cast<Y*>(something);
这里我们正在转换为Y*
,但返回的指针是X*
,那么这意味着什么?
我很惊讶语法不仅仅是:
X* x = dynamic_cast(something);
因为肯定想要分配给X*
会暗示这是我们要转换的类型(或者是??)?
答案 0 :(得分:4)
演员;
dynamic_cast<Y*>(something);
如果成功,则返回指向Y
的指针。然后在分配中隐式转换为X*
。
代码相当于;
Y* y = dynamic_cast<Y*>(something);
X* x = y;
没有关于X
,Y
和something
如何相关的信息,但如果它们是相关的,那么这一切都有效。
代码X* x = dynamic_cast<Y*>(something);
的一个可能用例是确保something
实际上是指针Y
,然后才能通过X*
使用。如果dynamic_cast
指针失败,则返回空指针。
Live sample(并查看评论)
答案 1 :(得分:1)
因为肯定想要分配给X *会暗示是 我们会转换为(或者是??)?
在许多情境中,您可能希望使用dynamic_cast
,其中许多情况都不明确。只需特殊套管这一箱就不值这个价了。
答案 2 :(得分:0)
这样做是个坏主意。虽然它可以在X是Y的祖先的情况下工作,但想象一下&#39;某些东西&#39;与Y无关,但与X有关.mynamic_cast(something)将返回0并将0分配给x。很容易错过这个微妙的问题。
底线:您应该始终将动态强制转换分配给您用作强制转换模板参数的相同类型。