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
(Neexistují žádné poznámky k této funkci jazyka platící pro všechny moduly runtime.)
Syntax
[default]::safe_cast<type-id>(expression)
prostředí 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 obsazení (C + +/ CX).
Syntax
[default]::safe_cast<type-id>(expression)
Parametry
type-id
Typ převodu expression k.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
safe_castVyvolá InvalidCastException Pokud nelze převést expression na typ určený type-id.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 prostředí 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.
Syntax
[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 na objekt typu id typu operandu výraz.
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ód (C++/CLI) a Peverify.exe (nástroj PEVerify).
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 Operátory přetypování.
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