不能将dynamic_cast用于const对象

Rak*_*kib 3 c++ dynamic-cast const const-cast

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

void func( const Base* const obj){
    Derived* der = dynamic_cast<Derived*>(obj);
}
Run Code Online (Sandbox Code Playgroud)

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

将参数传递为非常重要const.我怎样才能做到这一点?我必须做这件事的第一应用丑陋的方式const_cast,然后dynamic_cast?有没有更好的方法?

Don*_*nie 9

const因为没有这样做而逃走了:

const Derived* der = dynamic_cast<const Derived*>(obj);
Run Code Online (Sandbox Code Playgroud)

如果你真的需要一个,Derived*那么你需要

Derived* der = dynamic_cast<Derived*>(const_cast<ObjType*>(obj));
Run Code Online (Sandbox Code Playgroud)

  • 如果你真的需要`Derived*`你需要的是重新设计解决方案. (3认同)

Dav*_*eas 7

什么,你不能做的是去除const预选赛了dynamic_cast.如果类型是多态的(至少有一个虚函数),你应该能够做到:

const Derived *der = dynamic_cast<const Derived*>(obj);
Run Code Online (Sandbox Code Playgroud)