Outils pour utilisateurs

Outils du site


lang:cpp:cast

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
lang:cpp:cast [2023/06/23 16:48] – [dynamic_cast] : précision sur les références rootlang:cpp:cast [2025/07/28 13:07] (Version actuelle) – [dynamic_cast] : précision sur la vitesse des dynamic_cast root
Ligne 37: Ligne 37:
  
 ''dynamic_cast'' permet de vérifier que le ''static_cast'' est possible. Il est nécessaire que la classe soit polymorphique (au moins une méthode virtuelle). ''dynamic_cast'' permet de vérifier que le ''static_cast'' est possible. Il est nécessaire que la classe soit polymorphique (au moins une méthode virtuelle).
 +
 +Le ''dynamic_cast'' utilise le pointeur de la table virtuel de l'objet et analyse une table contenant tous les pointeurs de tables virtuels. Si le programme est très gros et contient beaucoup de classes polymorphiques, le ''dynamic_cast'' peut être lent s'il est appelé très fréquemment. C'est pour cette raison que certains programmes implémentent une méthode virtuelle ''get_type'' qui renvoie un ''enum'' pour vérifier si le cast est possible.
 +
 +[[https://thewayofc.blogspot.com/2007/09/alternative-ways-to-implement-downcasts.html| Alternative ways to implement downcasts]] {{ :lang:cpp:cast:the_way_of_c_c_alternative_ways_to_implement_downcasts_7_28_2025_1_06_49_pm_.html |Archive du 11/09/2007 le 28/07/2025}}
  
 <code cpp> <code cpp>
Ligne 171: Ligne 175:
 Les classes A et B étant identiques, il est normal que le programme s'exécute correctement. Les classes A et B étant identiques, il est normal que le programme s'exécute correctement.
  
-Mais avec un sanitizer ''clang++ -fsanitize=undefined main.cc -o a.out -flto -fvisibility=hidden'' :+Mais avec un sanitizer ''clang++ -fsanitize=undefined -fno-sanitize-recover=all main.cc -o a.out -flto -fvisibility=hidden'' :
  
   main.cc:17:13: runtime error: member call on address 0x7ffc03ba2878 which does not point to an object of type 'B'   main.cc:17:13: runtime error: member call on address 0x7ffc03ba2878 which does not point to an object of type 'B'
lang/cpp/cast.1687531737.txt.gz · Dernière modification : de root