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 [2020/05/11 00:30] – Suppression de la taille par défaut pour les images rootlang:cpp:cast [2024/11/12 12:45] (Version actuelle) – Modification des options de compilation des sanitizers root
Ligne 63: Ligne 63:
 </code> </code>
  
 +Il est aussi possible d'utiliser ''dynamic_cast'' avec des références. En cas d'échec, une exception ''std::bad_cast'' sera généré.
 +
 +<code c++>
 +#include <typeinfo>
 +
 +class A {
 + public:
 +  virtual ~A() = default;
 +};
 +
 +class B : public A {};
 +
 +class C {};
 +
 +int main() {
 +  B b;
 +  A& a = dynamic_cast<A&>(b);
 +  try {
 +    C& c = dynamic_cast<C&>(b);
 +  } catch (const std::bad_cast&) {
 +    return 1;
 +  }
 +  return 0;
 +}
 +</code>
 +
 +[[https://www.ibm.com/docs/en/i/7.2?topic=operator-dynamic-casts-references|Dynamic Casts with References]] {{ :lang:cpp:cast:dynamic_casts_with_references_-_ibm_documentation_23_06_2023_16_43_55_.html |Archive du 14/04/2021 le 23/06/2023}}
 ===const_cast=== ===const_cast===
  
Ligne 144: Ligne 171:
 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.1589149846.txt.gz · Dernière modification : 2020/05/11 00:30 de root