使用dynamic_cast转换const类

时间:2010-08-31 02:37:41

标签: c++ const dynamic-cast

我想投这个:

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,但这不起作用。

2 个答案:

答案 0 :(得分:18)

试试这个:

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

dynamic_cast无法移除const限定符。你可以使用const分别抛弃const_cast,但在大多数情况下这通常都是个坏主意。就此而言,如果你发现自己使用dynamic_cast,那通常表明你有更好的方法可以做你想做的事情。这并不总是错的,但把它当作一个警示标志,表明你正在以艰难的方式做事。

答案 1 :(得分:2)

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

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

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