我想知道如何解决这个问题。我不明白这个问题在问我什么:
dynamic_cast<Y>(new X)
最佳答案
首先,为了合法起见,Y
必须是指针类型。那么让我们
将问题重写为dynamic_cast<Ycv_qualifiers*>( new X )
。完成此操作后,
如果X
是完整的类类型,并且X
是一个完整的类,则为合法
多态类型,或Y
与X
相同,或者是基数X
的类。
如果Y
与X
相同,或者是的基类,它将成功。X
。请注意,在这些情况下,dynamic_cast
具有相同的
行为为static_cast
,实际上对应于
隐式转换,因此通常只需编写new X
,
没有任何 Actor 。 (在某些特殊情况下,
通常可能需要将结果传递给void*
参数。在这种情况下,我希望static_cast
,但是两者的语义恰好是
在这种情况下相同。)
最后,有一个特殊情况(也会成功):ifX
是多态类型,Y
是voidcv_qualifiers *
。在这种情况下,dynamic_cast
确实具有与static_cast
不同的语义,尽管
因为从X*
返回的new X
将具有类型
“指向大多数派生类型的指针”,实际效果
将相同(同样,与隐式相同)
转换)。
关于c++ - 合法dynamic_cast,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13669118/