我想投这个:
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,但这不起作用。
答案 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));
虽然上述两种铸件都有效,但应避免使用第二种铸件。