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

(Žádná informace o této funkci jazyka neplatí pro všechny moduly runtime.)

23b7yy6w.collapse_all(cs-cz,VS.110).gifSyntaxe

[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).

23b7yy6w.collapse_all(cs-cz,VS.110).gifSyntaxe

[default]::safe_cast<type-id>(expression)

23b7yy6w.collapse_all(cs-cz,VS.110).gifParametry

  • 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.

23b7yy6w.collapse_all(cs-cz,VS.110).gifPozná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.

23b7yy6w.collapse_all(cs-cz,VS.110).gifPožadavky

Možnost kompilátoru: /ZW

23b7yy6w.collapse_all(cs-cz,VS.110).gifPří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.

23b7yy6w.collapse_all(cs-cz,VS.110).gifSyntaxe

[cli]::safe_cast<type-id>(expression)

23b7yy6w.collapse_all(cs-cz,VS.110).gifParametry

  • 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.

23b7yy6w.collapse_all(cs-cz,VS.110).gifPozná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:

23b7yy6w.collapse_all(cs-cz,VS.110).gifPožadavky

Možnost kompilátoru: /clr

23b7yy6w.collapse_all(cs-cz,VS.110).gifPří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

Součást rozšíření pro Runtime platformy