safe_cast (C++/CLI a C++/CX)

Operace safe_cast vrátí zadaný výraz jako zadaný typ, pokud je úspěšný; v opačném případě vyvolá InvalidCastException.

Všechny moduly runtime

(Pro tuto funkci jazyka neexistují žádné poznámky, které platí pro všechny moduly runtime.)

Syntaxe

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

prostředí Windows Runtime

safe_cast umožňuje změnit typ zadaného výrazu. V situacích, kdy plně očekáváte, že se proměnná nebo parametr převést na určitý typ, můžete použít safe_cast bez bloku try-catch k detekci programovacích chyb během vývoje. Další informace naleznete v tématu Přetypování (C++/CX).

Syntaxe

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

Parametry

ID typu
Typ, na který se má výraz převést. Popisovač odkazu nebo typu hodnoty, typu hodnoty nebo sledovacího odkazu na odkaz nebo typ hodnoty.

Výraz
Výraz, který se vyhodnotí jako popisovač pro odkaz nebo typ hodnoty, typ hodnoty nebo sledovací odkaz na odkaz nebo typ hodnoty.

Poznámky

safe_cast vyvolá, InvalidCastException pokud nemůže převést výraz na typ zadaný podle id typu. Chcete-li zachytit InvalidCastException, zadejte možnost kompilátoru /EH (Exception Handling Model) a použijte příkaz try/catch.

Požadavky

Možnost kompilátoru: /ZW

Příklady

Následující příklad kódu ukazuje použití safe_cast s 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);
   }
}
Caught expected exception: InvalidCastException

CLR (Common Language Runtime)

safe_cast umožňuje změnit typ výrazu a vygenerovat ověřitelný kód MSIL.

Syntaxe

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

Parametry

ID typu
Popisovač odkazu nebo typu hodnoty, typu hodnoty nebo sledovacího odkazu na odkaz nebo typ hodnoty.

Výraz
Výraz, který se vyhodnotí jako popisovač pro odkaz nebo typ hodnoty, typ hodnoty nebo sledovací odkaz na odkaz nebo typ hodnoty.

Poznámky

Výraz safe_cast<type-id>(výrazu) převede výraz operand na objekt typu id.

Kompilátor přijme static_cast na většině míst, kde přijme safe_cast. Je však zaručeno, že safe_cast vytvořit ověřitelný jazyk MSIL, zatímco by mohl vést k neověřitelnému static_cast jazyku MSIL. Další informace o ověřitelném kódu najdete v tématu Pure and Verifiable Code (C++/CLI) a Peverify.exe (PEVerify Tool).

Podobně jako static_castsafe_cast vyvolá uživatelem definované převody.

Další informace o přetypování naleznete v tématu Operátory přetypování.

safe_cast nepoužije const_cast (odlitekconst).

safe_cast je v oboru názvů rozhraní příkazového řádku. Další informace najdete v tématu Obory názvů platformy, výchozího nastavení a rozhraní příkazového řádku.

Další informace o safe_cast najdete tady:

Požadavky

Možnost kompilátoru: /clr

Příklady

Jedním z příkladů, kdy kompilátor nepřijme, static_cast ale přijme safe_cast , je přetypování mezi nesouvisejícími typy rozhraní. V safe_cast kompilátor nevystaví chybu převodu a provede kontrolu za běhu, aby zjistil, jestli je možné přetypování.

// 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

Viz také

Přípony komponent pro .NET a UPW