Sdílet prostřednictvím


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

  

Viz také

Koncepty

Rozšíření komponent pro platformy běhového prostředí