44 votes

Pourquoi static_cast ne peut-il pas être utilisé pour effectuer un downcast lorsque l'héritage virtuel est impliqué ?

Considérez le code suivant :

 struct Base {};
struct Derived : public virtual Base {};

void f()
{
    Base* b = new Derived;
    Derived* d = static_cast<Derived*>(b);
}

Ceci est interdit par la norme ( [n3290: 5.2.9/2] ) donc le code ne se compile pas, car Derived hérite virtuellement Base . La suppression du virtual de l'héritage rend le code valide.

Quelle est la raison technique de l'existence de cette règle ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X