13

我想投这个:

class Base 
{
public:
    virtual ~Base(){};
};
class Der : public Base {};

int main()
{
    const Base* base = new Der;
    Der* der = dynamic_cast<Der*>(base); // Error

    return 0;
}

我应该怎么办?我试图提出:const Der* der = dynamic_cast<Der*>(base);维护 const 但这不起作用。

4

2 回答 2

27

尝试这个:

const Der* der = dynamic_cast<const Der*>(base);

dynamic_cast无法删除const限定符。const您可以使用 a 单独丢弃const_cast,但在大多数情况下这通常是一个坏主意。就此而言,如果你发现自己在使用dynamic_cast,这通常表明有更好的方法来做你想做的事情。这并不总是错误的,但可以将其视为一个警告信号,表明您正在以艰难的方式做事。

于 2010-08-31T02:39:30.443 回答
4
const Der* der1 = dynamic_cast<const Der*>(base); 

Der* der2 = dynamic_cast<Der*>(const_cast<Base*>(base));

虽然上述两种铸件都有效,但应避免使用第二种。

于 2010-08-31T10:52:34.347 回答