Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
L'operazione safe_cast restituisce l'espressione specificata come tipo specificato. Se l'operazione non riesce, genera un'eccezione InvalidCastException.
All Runtimes
Non esistono note per questa funzionalità del linguaggio che si applichino a tutti i runtime.
Syntax
[default]:: safe_cast< type-id >( expression )
Windows Runtime
Usare safe_cast per modificare il tipo di un'espressione specificata. 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 a un tipo riferimento o valore, un tipo valore oppure un riferimento di rilevamento a un tipo riferimento o valore.
expression
Espressione che restituisce un handle a tipo riferimento o valore oppure un riferimento di rilevamento a un tipo riferimento o valore.
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
Opzione del compilatore: /ZW
Examples
L'esempio di codice seguente illustra come usare safe_cast con 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
Runtime del Linguaggio Comune (Common Language Runtime)
safe_cast modifica il tipo di un'espressione e genera codice MSIL verificabile.
Syntax
[cli]:: safe_cast< type-id >( expression )
Parameters
type-id
Handle a un tipo riferimento o valore, un tipo valore oppure un riferimento di rilevamento a un tipo riferimento o valore.
expression Espressione che restituisce un handle a un tipo riferimento o valore, a un tipo valore o a un riferimento di rilevamento a un tipo riferimento o valore.
Remarks
The expression safe_cast<type-id>(expression) converts the operand expression to an object of type type-id.
Il compilatore accetta un oggetto static_cast nella maggior parte delle posizioni in cui accetta un oggetto safe_cast. Tuttavia, safe_cast produce sempre MSIL verificabile, mentre un static_cast oggetto potrebbe produrre MSIL non verificabile. Per altre informazioni sul codice verificabile, vedere Codice puro e verificabile (C++/CLI) e Peverify.exe (strumento PEVerify).
Come static_cast, safe_cast richiama le conversioni definite dall'utente.
For more information about casts, see Casting Operators.
safe_cast non applica un oggetto const_cast (cast away const).
safe_cast è nello spazio dei nomi dell'interfaccia della riga di comando. Per altre informazioni, vedere Spazi dei nomi della piattaforma, delle impostazioni predefinite e dell'interfaccia della riga di comando.
Per altre informazioni su safe_cast, vedere:
Requirements
Opzione del compilatore: /clr
Examples
Un esempio di dove il compilatore non accetta un oggetto static_cast ma accetta un safe_cast è per i cast tra tipi di interfaccia non correlati. Con safe_cast, il compilatore non genera un errore di conversione ed esegue un controllo in fase di esecuzione per verificare se il cast è possibile.
// 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