我想知道如何解决这个问题。我不明白这个问题在问我什么:

dynamic_cast<Y>(new X)
  • 合法吗?
  • 大概成功了吗?
  • 最佳答案

    首先,为了合法起见,Y必须是指针类型。那么让我们
    将问题重写为dynamic_cast<Ycv_qualifiers*>( new X )。完成此操作后,
    如果X是完整的类类型,并且X是一个完整的类,则为合法
    多态类型,或YX相同,或者是基数X的类。

    如果YX相同,或者是的基类,它将成功。X。请注意,在这些情况下,dynamic_cast具有相同的
    行为为static_cast,实际上对应于
    隐式转换,因此通常只需编写new X
    没有任何 Actor 。 (在某些特殊情况下,
    通常可能需要将结果传递给void*参数。在这种情况下,我希望static_cast,但是两者的语义恰好是
    在这种情况下相同。)

    最后,有一个特殊情况(也会成功):ifX是多态类型,Yvoidcv_qualifiers *。在这种情况下,dynamic_cast确实具有与static_cast不同的语义,尽管
    因为从X*返回的new X将具有类型
    “指向大多数派生类型的指针”,实际效果
    将相同(同样,与隐式相同)
    转换)。

    关于c++ - 合法dynamic_cast,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13669118/

    10-13 08:06