Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Operace safe_cast vrátí zadaný výraz jako zadaný typ. Pokud operace není úspěšná, vyvolá chybu InvalidCastException.
All Runtimes
(Pro tuto funkci jazyka neexistují žádné poznámky, které platí pro všechny moduly runtime.)
Syntax
[default]:: safe_cast< type-id >( expression )
prostředí Windows Runtime
Slouží safe_cast ke změně typu zadaného výrazu. If you expect a variable or parameter to be convertible to a certain type, use safe_cast without a try-catch block to detect programming errors during development. For more information, see Casting (C++/CX).
Syntax
[default]:: safe_cast< type-id >( expression )
Parameters
type-id
The type to convert expression to. Popisovač odkazu nebo typu hodnoty, typu hodnoty nebo sledovacího odkazu na odkaz nebo typ hodnoty.
expression
Výraz, který se vyhodnotí jako popisovač pro odkaz nebo typ hodnoty, typ hodnoty nebo sledovací odkaz na odkaz nebo typ hodnoty.
Remarks
safe_cast throws InvalidCastException if it can't convert expression to the type specified by type-id. To catch InvalidCastException, specify the /EH (Exception Handling Model) compiler option, and use a try/catch statement.
Requirements
Možnost kompilátoru: /ZW
Examples
Následující příklad kódu ukazuje, jak se používá safe_cast s prostředím 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 změní typ výrazu a vygeneruje ověřitelný kód JAZYKa MSIL.
Syntax
[cli]:: safe_cast< type-id >( expression )
Parameters
type-id
Popisovač odkazu nebo typu hodnoty, typu hodnoty nebo sledovacího odkazu na odkaz nebo typ hodnoty.
expression Výraz, který se vyhodnotí jako popisovač pro odkaz nebo typ hodnoty, typ hodnoty nebo sledovací odkaz na odkaz nebo typ hodnoty.
Remarks
The expression safe_cast<type-id>(expression) converts the operand expression to an object of type type-id.
Kompilátor přijímá na static_cast většině míst, kde přijímá .safe_cast Vždy však safe_cast vytváří ověřitelný jazyk MSIL, zatímco by mohl vést k neověřitelnému jazyku static_cast MSIL. Další informace o ověřitelném kódu najdete v tématu Čistý a ověřitelný kód (C++/CLI) a Peverify.exe (nástroj PEVerify).
Podobně jako static_castvyvolá safe_cast uživatelem definované převody.
For more information about casts, see Casting Operators.
safe_cast nepoužije const_cast (odtypovat const).
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 najdete tady safe_cast:
- Přetypování ve stylu jazyka C pomocí /clr (C++/CLI)
- Postupy: Používání operátoru safe_cast v jazyce C++/CLI
Requirements
Možnost kompilátoru: /clr
Examples
Jedním z příkladů, kdy kompilátor nepřijímá, ale přijímásafe_cast, static_cast je přetypování mezi nesouvisejícími typy rozhraní. Kompilátor safe_castv případě, že kompilátor nevystaví chybu převodu a provede kontrolu za běhu, aby zjistil, jestli je přetypování mož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