Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
L’opération safe_cast retourne l’expression spécifiée comme type spécifié. Si l’opération ne réussit pas, elle lève un InvalidCastException.
All Runtimes
(Aucune remarque pour cette fonctionnalité de langage ne s’applique à tous les runtimes.)
Syntax
[default]:: safe_cast< type-id >( expression )
Windows Runtime
Permet safe_cast de modifier le type d’une expression spécifiée. If you expect a variable or parameter to be convertible to a certain type, use safe_cast without a try-catch block to detect programming errors during development. For more information, see Casting (C++/CX).
Syntax
[default]:: safe_cast< type-id >( expression )
Parameters
type-id
The type to convert expression to. Handle vers un type référence ou valeur, type valeur ou référence de suivi à un type référence ou valeur.
expression
Expression qui s'évalue en handle vers un type référence ou type valeur, type valeur ou référence de suivi vers un type référence ou valeur.
Remarks
safe_cast throws InvalidCastException if it can't convert expression to the type specified by type-id. To catch InvalidCastException, specify the /EH (Exception Handling Model) compiler option, and use a try/catch statement.
Requirements
Option du compilateur : /ZW
Examples
L’exemple de code suivant montre comment utiliser 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);
}
}
Caught expected exception: InvalidCastException
Environnement d'exécution pour le langage commun
safe_cast modifie le type d’une expression et génère du code MSIL vérifiable.
Syntax
[cli]:: safe_cast< type-id >( expression )
Parameters
type-id
Handle vers un type référence ou valeur, type valeur ou référence de suivi à un type référence ou valeur.
expression Expression qui prend la valeur d’un handle vers un type référence ou valeur, un type valeur ou une référence de suivi à un type référence ou valeur.
Remarks
The expression safe_cast<type-id>(expression) converts the operand expression to an object of type type-id.
Le compilateur accepte un static_cast dans la plupart des endroits où il accepte un safe_cast. Toutefois, safe_cast produit toujours des msIL vérifiables, tandis qu’un MSIL peut produire un static_cast MSIL inverifiable. Pour plus d’informations sur le code vérifiable, consultez Code vérifiable pur et vérifiable (C++/CLI) et Peverify.exe (PEVerify Tool).
Comme static_cast, safe_cast appelle les conversions définies par l’utilisateur.
For more information about casts, see Casting Operators.
safe_cast ne s’applique pas à un const_cast (caster const).
safe_cast se trouve dans l’espace de noms cli. Pour plus d’informations, consultez Les espaces de noms platform, default et cli.
Pour plus d’informations sur safe_cast, consultez :
Requirements
Option du compilateur : /clr
Examples
L’un des exemples où le compilateur n’accepte pas un static_cast mais accepte un safe_cast cas 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 une vérification 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");
}
}
Caught expected exception