safe_cast (rozšíření komponent C++)
Operace safe_cast, je-li úspěšná, vrátí zadaný výraz jako zadaný typ. Jinak vyvolá výjimku InvalidCastException.
Všechny moduly runtime
(Žádná informace o této funkci jazyka neplatí pro všechny moduly runtime.)
Syntaxe
[default]::safe_cast<type-id>(expression)
Windows Runtime
Operace safe_cast umožňuje změnit typ zadaného výrazu.V situacích, kdy je plně očekávána převoditelnost proměnné nebo parametru na určitý typ, lze operaci safe_cast použít k detekci chyb v programování během vývoje bez bloku try-catch.Další informace naleznete v tématu týkajícím se přetypování (C++/CX).
Syntaxe
[default]::safe_cast<type-id>(expression)
Parametry
type-id
Typ, na který má být výraz převeden.Popisovač odkazu nebo typu hodnoty, typ hodnoty nebo sledovací odkaz na odkaz nebo typ hodnoty.expression
Výraz vyhodnocovaný na popisovač odkazu nebo typu hodnoty, typ hodnoty nebo sledovací odkaz na odkaz nebo typ hodnoty.
Poznámky
Nemůže-li operace safe_cast převést výraz na typ určený parametrem type-id, vyvolá výjimku InvalidCastException.Chcete-li výjimku InvalidCastException zachytit, zadejte kompilátoru možnost /EH (Model zpracování výjimek) a použijte příkaz try/catch.
Požadavky
Možnost kompilátoru: /ZW
Příklady
Příklad
Následující příklad kódu demonstruje použití operace safe_cast v architektuře 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);
}
}
Výsledek
Common Language Runtime
Operace safe_cast umožňuje změnit typ výrazu a generovat ověřitelný kód MSIL.
Syntaxe
[cli]::safe_cast<type-id>(expression)
Parametry
type-id
Popisovač odkazu nebo typu hodnoty, typ hodnoty nebo sledovací odkaz na odkaz nebo typ hodnoty.expression
Výraz vyhodnocovaný na popisovač odkazu nebo typu hodnoty, typ hodnoty nebo sledovací odkaz na odkaz nebo typ hodnoty.
Poznámky
Výraz safe_cast<type-id>(expression) převede výraz operandu na objekt typu type-id.
Na většině míst, kde kompilátor přijde operaci safe_cast, přijme také operaci static_cast.Operace safe_cast však zaručuje generování ověřitelného kódu MSIL, kdežto operace static_cast může generovat kód neověřitelný.Další informace o ověřitelném kódu naleznete v tématech Čistý a ověřitelné kódu (C + +/ CLI) a Peverify.exe (PEVerify nástroj).
Obdobně jako operace static_cast vyvolává operace safe_cast uživatelem definované převody.
Další informace o přetypování naleznete v tématu Obsazení operátory.
Operace safe_cast nepoužívá operátor const_cast (odstraňte slovo const).
Operace safe_cast je k dispozici v oboru názvu cli.Další informace naleznete v tématu Obory názvů Platform, default a cli (rozšíření komponent C++).
Další informace o operaci safe_cast naleznete v tématech:
Požadavky
Možnost kompilátoru: /clr
Příklady
Příklad
Jedním příkladem, kde kompilátor nepřijme operaci static_cast, ale operaci safe_cast, je přetypování mezi nesouvisejícími typy rozhraní.U operace safe_cast kompilátor nevyvolá chybu převodu a provede za běhu kontrolu, zda převod lze provést.
// 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");
}
}
Výsledek