Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Åtgärden safe_cast returnerar det angivna uttrycket som den angivna typen. Om åtgärden inte lyckas genererar den en InvalidCastException.
All Runtimes
(Det finns inga kommentarer för den här språkfunktionen som gäller för alla körningar.)
Syntax
[default]:: safe_cast< type-id >( expression )
Windows Runtime
Använd safe_cast för att ändra typen av ett angivet uttryck. 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. Ett handtag till en referens- eller värdetyp, en värdetyp eller en spårningsreferens till en referens- eller värdetyp.
expression
Ett uttryck som utvärderas till en referens eller värdetyp, en värdetyp eller en spårningsreferens till en referens- eller värdetyp.
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
Kompilatoralternativ: /ZW
Examples
Följande kodexempel visar hur du använder safe_cast med 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
Allmänt språk-runtime
safe_cast ändrar typen av ett uttryck och genererar verifierbar MSIL-kod.
Syntax
[cli]:: safe_cast< type-id >( expression )
Parameters
type-id
Ett handtag till en referens- eller värdetyp, en värdetyp eller en spårningsreferens till en referens- eller värdetyp.
expression Ett uttryck som utvärderas till en referens eller värdetyp, en värdetyp eller en spårningsreferens till en referens- eller värdetyp.
Remarks
The expression safe_cast<type-id>(expression) converts the operand expression to an object of type type-id.
Kompilatorn accepterar en static_cast på de flesta platser där den accepterar en safe_cast. Skapar dock safe_cast alltid verifierbar MSIL, medan en static_cast kan ge en ickeverifierbar MSIL. Mer information om verifierbar kod finns i Pure and Verifiable Code (C++/CLI) and Peverify.exe (PEVerify Tool).
Som static_cast, safe_cast anropar användardefinierade konverteringar.
For more information about casts, see Casting Operators.
safe_cast använder inte en const_cast (gjuten bort const).
safe_cast är i cli-namnområdet. Mer information finns i Plattform, standard och cli-namnområden.
Mer information om finns i safe_cast:
Requirements
Kompilatoralternativ: /clr
Examples
Ett exempel på var kompilatorn inte accepterar en static_cast men accepterar en safe_cast är för casts mellan orelaterade gränssnittstyper. Med safe_castutfärdar kompilatorn inte ett konverteringsfel och utför en kontroll vid körningen för att se om casten är möjlig.
// 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