Maison > développement back-end > C++ > En quoi `dynamic_cast` de C diffère-t-il de `static_cast` dans la vérification de type à l'exécution ?

En quoi `dynamic_cast` de C diffère-t-il de `static_cast` dans la vérification de type à l'exécution ?

Susan Sarandon
Libérer: 2024-12-01 15:29:15
original
432 Les gens l'ont consulté

How Does C  's `dynamic_cast` Differ from `static_cast` in Runtime Type Checking?

Comprendre Dynamic_cast en C

dynamic_cast, comme son nom l'indique, permet la vérification du type d'exécution pour les conversions de pointeur et de référence en C . Contrairement à static_cast, qui effectue la conversion au moment de la compilation, Dynamic_cast effectue la vérification au moment de l'exécution.

Pour comprendre le concept de Dynamic_cast en C, comparons-le au langage C.

static_cast

static_cast<Type*>(ptr);
Copier après la connexion

Cela effectue une conversion de type de ptr en Type* au moment de la compilation. Cependant, cela suppose que les types sont liés et exige qu'ils soient compatibles. Si la conversion n'est pas valide, le programme ne parviendra pas à compiler.

dynamic_cast

dynamic_cast<Type*>(ptr);
Copier après la connexion

Semblable à static_cast, Dynamic_cast tente de convertir le pointeur ptr en Type* . Cependant, cette conversion se produit au moment de l'exécution. Cela permet plus de flexibilité, en particulier lorsqu'il s'agit de l'héritage et du polymorphisme.

Dans l'exemple fourni :

  • dynamic_cast(ap) convertit avec succès ap en B* parce que B est dérivé de A.
  • dynamic_cast(ap) et Dynamic_cast(b) fonctionne également correctement.
  • dynamic_cast(ap) renvoie NULL car C n'est pas dérivé de A.
  • Pour les références, Dynamic_cast(&*ap) réussissent tous deux, tandis que Dynamic_cast(&*ap) lève une exception std::bad_cast.

Règles pour Dynamic_cast :

  • Base- Castings vers dérivés (B2D) : Ces transtypages renvoient toujours un pointeur valide si le pointeur pointe vers un objet du type spécifié. Si le pointeur ne pointe pas vers un objet du type correct, un pointeur NULL est renvoyé.
  • Casts dérivés vers la base (D2B) : Ces transtypages réussissent toujours et renvoient un pointeur valide. L'exception se produit lors de la tentative de conversion d'un pointeur vide vers un type dérivé, ce qui entraîne un pointeur NULL.

N'oubliez pas que pour la conversion de base en dérivé, les classes impliquées doivent être polymorphes. Cela signifie qu'ils doivent avoir au moins une fonction virtuelle déclarée dans leur classe de base.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal