Я хочу разыграть это:
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
для поддержки const, но это не работает.
Попробуйте это:
const Der* der = dynamic_cast<const Der*>(base);
dynamic_cast
не имеет возможности удалить конст
квалификатор. Вы можете отбрасывать const
отдельно, используя const_cast
, но в большинстве случаев это плохая идея. В этом отношении, если вы ловите себя на использовании dynamic_cast
, обычно это признак того, что есть лучший способ сделать то, что вы пытаетесь сделать. Это не всегда неправильно, но воспринимайте это как предупреждение о том, что вы делаете что-то не так.
const Der* der1 = dynamic_cast<const Der*>(base);
Der* der2 = dynamic_cast<Der*>(const_cast<Base*>(base));
в то время как оба вышеупомянутых литья работают, следует избегать второго.