IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

FAQ C++/CLI et VC++.Net

FAQ C++/CLI et VC++.NetConsultez toutes les FAQ

Nombre d'auteurs : 29, nombre de questions : 248, création le 22 février 2013 

 
OuvrirSommaireLe langage C++/CLISyntaxeCast

Le cast entre types est le fait de convertir un type en un autre. Il fonctionne aussi bien pour les types natifs (int, double, etc ...) que pour les classes et les structures.
Le C++/CLI propose trois opérateurs de cast différents : static_cast, dynamic_cast et safe_cast.
Chacun a pour but d'essayer de convertir un type en un autre. "Essayer", car pour pouvoir convertir décemment une classe en une autre, elles ont besoin d'être du même type ou bien d'en hériter. (on parle alors de downcasting).

L'opérateur static_cast est le plus rapide d'entre eux, mais c'est également le plus dangereux, car il part du principe que le développeur sait ce qu'il fait, donc il ne teste pas la validité du cast.
L'opérateur dynamic_cast est plus lent que le static_cast car il vérifie que la conversion de type est valide. Si elle ne l'est pas, il renverra nullptr.
L'opérateur safe_cast enfin permet la conversion vérifiable entre les types de .Net. C'est cet opérateur qu'on va donc utiliser le plus souvent.

Créé le 27 mars 2007  par nico-pyright(c)

Lien : Les casts dans la faq C++
Lien : Comment implémenter l'opérateur d'assignation 'as' du C# ?
Lien : Pourquoi utiliser safe_cast ?

safe_cast est similaire à static_cast dans la mesure où il permet les conversions implicites et explicites de types. Il ressemble à dynamic_cast dans la mesure où il vérifie la validité du cast.

L'intérêt de caster en utilisant safe_cast plutôt que static_cast est qu'il produit du MSIL vérifiable. Cela permet aussi d'intercepter un message d'exception lorsque le cast échoue (System::InvalidCastException).

Mis à jour le 27 mars 2007  par nico-pyright(c)

Le cast (old style) C a pour syntaxe :

 
Sélectionnez
MonType ^type1 = (MonType^)(type2);

Lorsqu'on l'utilise, c'est d'abord le safe_cast qui sera utlisé comme cast. Ce qui fait qu'on pourra se passer d'écrire safe_cast en utilisant le cast style C.
Ainsi, ces deux lignes sont équivalentes :

 
Sélectionnez
TextBox ^T = safe_cast<TextBox ^>(sender);
TextBox ^T = (TextBox ^)(sender);
Créé le 27 mars 2007  par nico-pyright(c)

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2006-2007 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.