4

我想编写一个方法,其中Base对象指针将作为参数传递,并在方法内部将其转换为派生对象指针。

void func( const Base* const obj){
    Derived* der = dynamic_cast<Derived*>(obj);
}

但它显示错误,因为动态转换不能丢弃 const specifier。但我不明白为什么const必须在这里删除说明符,我所做的只是创建一个派生指针,它应该指向指针之后的某个偏移量。我也试过const Derived* const der = dynamic_cast<Derived*>(obj);,但没有结果。

将参数作为 传递是很重要的const。我怎样才能做到这一点?我必须以丑陋的方式先申请const_castdynamic_cast?有没有更好的方法?

4

2 回答 2

11

你正在抛弃,const因为你没有这样做:

const Derived* der = dynamic_cast<const Derived*>(obj);

如果你真的需要 aDerived*那么你需要

Derived* der = dynamic_cast<Derived*>(const_cast<ObjType*>(obj));
于 2014-05-23T04:21:37.143 回答
7

您不能做的是删除const带有dynamic_cast. 如果类型是多态的(至少有一个虚函数),你应该能够做到:

const Derived *der = dynamic_cast<const Derived*>(obj);
于 2014-05-23T04:20:28.897 回答