Je veux lancer ceci:
class Base { public: virtual ~Base(){}; }; class Der : public Base {}; int main() { const Base* base = new Der; Der* der = dynamic_cast(base); // Error return 0; }
Que devrais-je faire? J’ai essayé de mettre: const Der* der = dynamic_cast(base);
pour maintenir le const, mais cela ne fonctionne pas.
Essaye ça:
const Der* der = dynamic_cast(base);
dynamic_cast
n’a pas la capacité de supprimer un qualificatif const
. Vous pouvez rejeter const
séparément en utilisant un const_cast
, mais c’est généralement une mauvaise idée dans la plupart des situations. En outre, si vous utilisez dynamic_cast
, cela dynamic_cast
généralement qu’il existe un meilleur moyen de faire ce que vous essayez de faire. Ce n’est pas toujours faux, mais considérez-le comme un signe que vous faites les choses à la dure.
const Der* der1 = dynamic_cast(base); Der* der2 = dynamic_cast(const_cast (base));
Bien que les deux castings ci-dessus fonctionnent, le second doit être évité.