Partager via


safe_cast (extensions du composant C++)

L'opération safe_cast retourne l'expression spécifiée comme type spécifié, en cas de succès ; sinon, lève l'exception InvalidCastException.

Tous les runtimes

(Aucune note de cette fonctionnalité de langage ne s'applique à tous les runtimes.)

23b7yy6w.collapse_all(fr-fr,VS.110).gifSyntaxe

[default]::safe_cast<type-id>(expression)

Windows Runtime

safe_cast vous permet de modifier le type d'une expression spécifiée.Dans les cas où vous vous attendez pleinement à ce qu'une variable ou un paramètre soit convertible en un certain type, vous pouvez utiliser safe_cast sans le bloc try-catch pour détecter des erreurs de programmation lors du développement.Pour plus d'informations, consultez Casting (C++/CX).

23b7yy6w.collapse_all(fr-fr,VS.110).gifSyntaxe

[default]::safe_cast<type-id>(expression)

23b7yy6w.collapse_all(fr-fr,VS.110).gifParamètres

  • ID type
    Type dans lequel convertir expression.Handle pour une référence ou un type valeur, un type valeur, ou une référence de suivi pour une référence ou un type valeur.

  • expression
    Expression qui correspond à un handle vers une référence ou vers un type valeur, un type valeur ou une référence de suivi vers une référence ou un type valeur.

23b7yy6w.collapse_all(fr-fr,VS.110).gifRemarques

safe_cast lève une InvalidCastException s'il ne peut pas convertir l'expression au type spécifié par l'ID type.Pour intercepter InvalidCastException, spécifiez l'option du compilateur /EH (Modèle de gestion des exceptions) et utilisez une instruction try/catch.

23b7yy6w.collapse_all(fr-fr,VS.110).gifConfiguration requise

Option du compilateur : /ZW

23b7yy6w.collapse_all(fr-fr,VS.110).gifExemples

Exemple

L'exemple de code suivant illustre l'utilisation de safe_cast avec Windows Runtime.

// safe_cast_ZW.cpp
// compile with: /ZW /EHsc

using namespace default;
using namespace Platform;

interface class I1 {};
interface class I2 {};
interface class I3 {};

ref class X : public I1, public I2 {};

int main(Array<String^>^ args) {
   I1^ i1 = ref new X;
   I2^ i2 = safe_cast<I2^>(i1);   // OK, I1 and I2 have common type: X
   // I2^ i3 = static_cast<I2^>(i1);   C2440 use safe_cast instead
   try {
      I3^ i4 = safe_cast<I3^>(i1);   // Fails because i1 is not derived from I3.
   } 
   catch(InvalidCastException^ ic) {
     wprintf(L"Caught expected exception: %s\n", ic->Message);
   }
}

Sortie

  

Common Language Runtime

safe_cast vous permet de modifier le type d'une expression et générer le code MSIL vérifiable.

23b7yy6w.collapse_all(fr-fr,VS.110).gifSyntaxe

[cli]::safe_cast<type-id>(expression)

23b7yy6w.collapse_all(fr-fr,VS.110).gifParamètres

  • ID type
    Handle pour une référence ou un type valeur, un type valeur, ou une référence de suivi pour une référence ou un type valeur.

  • expression
    Expression qui correspond à un handle vers une référence ou vers un type valeur, un type valeur ou une référence de suivi vers une référence ou un type valeur.

23b7yy6w.collapse_all(fr-fr,VS.110).gifRemarques

L'expression safe_cast<type identificateur>(expression) convertit l'expression d'opérande en objet de type type identificateur.

Le compilateur acceptera un static_cast à la plupart des endroits où il acceptera un safe_cast.Toutefois, il est garanti que safe_cast produise un code MSIL vérifiable, alors que static_cast peut produire un code MSIL non vérifiable.Pour plus d'informations sur le code vérifiable, consultez Code pur et vérifiable (C++/CLI) et Peverify.exe (outil PEVerify).

Comme static_cast, safe_cast appelle des conversions définies par l'utilisateur.

Pour plus d'informations sur les casts, consultez Opérateurs de cast.

safe_cast n'applique pas un const_cast (modifiez le cast const).

safe_cast est dans l'espace de noms cli.Consultez Plateforme, valeurs par défaut et espaces de noms CLI (extensions du composant C++) pour plus d'informations.

Pour plus d'informations sur safe_cast, consultez :

23b7yy6w.collapse_all(fr-fr,VS.110).gifConfiguration requise

Option du compilateur : /clr

23b7yy6w.collapse_all(fr-fr,VS.110).gifExemples

Exemple

Un exemple d'emplacement où le compilateur ne recevra pas un static_cast mais recevra un safe_cast est pour les casts entre les types d'interface non liés.Avec safe_cast, le compilateur n'émet pas d'erreur de conversion et effectue un contrôle au moment de l'exécution pour voir si le cast est possible

// safe_cast.cpp
// compile with: /clr
using namespace System;

interface class I1 {};
interface class I2 {};
interface class I3 {};

ref class X : public I1, public I2 {};

int main() {
   I1^ i1 = gcnew X;
   I2^ i2 = safe_cast<I2^>(i1);   // OK, I1 and I2 have common type: X
   // I2^ i3 = static_cast<I2^>(i1);   C2440 use safe_cast instead
   try {
      I3^ i4 = safe_cast<I3^>(i1);   // fail at runtime, no common type
   } 
   catch(InvalidCastException^) {
      Console::WriteLine("Caught expected exception");
   }
}

Sortie

  

Voir aussi

Concepts

Extensions de composant pour les plateformes Runtime