2010-08-31 158 views
9

我想施放此:投常量类的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);来支持常量,但这是行不通的。

回答

17

试试这个:

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

dynamic_cast不必删除const预选赛的能力。您可以使用const_cast单独丢弃const,但在大多数情况下这通常是一个坏主意。对于这个问题,如果你使用dynamic_cast来捕捉自己,这通常表明有一个更好的方法来做你正在做的事情。这并不总是错误的,但把它看作是一个警告信号,表明你正在以艰难的方式做事。

+0

我试过了不行。 – okami 2010-08-31 02:42:36

+0

您需要两次const - 一次在被分配的变量的类型中,一次在'dynamic_cast'中。在你尝试的例子中,你只有第一个。 – Eclipse 2010-08-31 02:48:42

+0

好的。但只是在我的问题下的一个quesiton。 为什么要保持虚拟〜Base(){};到dynamic_cast不会给我一个错误? – okami 2010-08-31 02:58:24

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

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

虽然上述两种铸件都可以工作,但应避免使用第二种铸件。

+0

编辑添加代码标记。 – Puppy 2010-08-31 10:54:03