不能将dynamic_cast用于const对象

时间:2014-05-23 04:17:24

标签: c++ const dynamic-cast const-cast

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

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

但它显示错误,因为动态强制转换无法抛弃const说明符。但是我不明白为什么必须在这里删除const说明符,我所做的只是创建一个派生的指针,该指针指向 base 指针。我也尝试了const Derived* const der = dynamic_cast<Derived*>(obj);,但没有结果。

将参数作为const传递非常重要。我怎样才能做到这一点?我是否必须以丑陋的方式首先应用const_cast然后dynamic_cast?有没有更好的方法?

2 个答案:

答案 0 :(得分:7)

你丢弃了const,因为你没有这样做:

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

如果您确实需要Derived*,那么您需要

Derived* der = dynamic_cast<Derived*>(const_cast<ObjType*>(obj));

答案 1 :(得分:6)

你不能做的是删除 const限定符dynamic_cast。如果类型是多态的(至少有一个虚函数),你应该能够:

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