Udostępnij za pośrednictwem


safe_cast (C++ Component Extensions)

Operacja safe_cast zwraca określone wyrażenie jako określony typ, jeśli się powiedzie; w przeciwnym wypadku zgłasza InvalidCastException.

Wszystkie środowiska wykonawcze

(Nie ma żadnych uwag dla tej funkcji języka, które mają zastosowanie do wszystkich programów środowiska uruchomienia.)

Składnia

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

Środowisko wykonawcze systemu Windows

safe_cast umożliwia zmianę typu określonego wyrażenia.W sytuacjach, gdzie w pełni spodziewasz się zmiennej lub parametru, który będzie można konwertować do określonego typu, możesz użyć safe_cast bez bloku try-catch, aby wykryć błędy programowania podczas opracowywania.Aby uzyskać więcej informacji, zobacz oddał (C + +/ CX).

Składnia

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

Parametry

  • type-id
    Aby przekonwertować typu expression do.Dojście do odwołania lub typu wartości, typu wartości lub śledzenie odwołania typu odwołania lub wartości.

  • expression
    Wyrażenie, które ocenia dojście do odwołania lub typu wartości, typ wartości lub śledzenie odwołania do typu odwołania lub wartości.

Uwagi

safe_castWyrzuca InvalidCastException Jeżeli nie może przekonwertować expression do typu określonego przez type-id.Aby wychwycić InvalidCastException, określ opcję kompilatora /EH (Model obsługi wyjątku) i użyj instrukcji try/catch.

Wymagania

Opcja kompilatora: /ZW

Przykłady

Przykład

Poniższy przykład kodu demonstruje, jak używać safe_cast z Środowisko wykonawcze systemu Windows elementami pracy.

// 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);
   }
}

Dane wyjściowe

  

Środowisko uruchomieniowe języka wspólnego

safe_cast pozwala zmienić typ wyrażenia i wygenerować możliwy do zweryfikowania kod MSIL.

Składnia

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

Parametry

  • type-id
    Dojście do odwołania lub typu wartości, typu wartości lub śledzenie odwołania typu odwołania lub wartości.

  • expression
    Wyrażenie, które ocenia dojście do odwołania lub typu wartości, typ wartości lub śledzenie odwołania do typu odwołania lub wartości.

Uwagi

Wyrażenie safe_cast<type-id>(expression) wyrażenia operand jest konwertowany na obiekt typu identyfikatora typu.

Kompilator zaakceptuje static_cast w większości miejsc, które będą akceptować safe_cast. Jednakże safe_cast gwarantowane jest wyprodukowanie weryfikowalnego MSIL,w którym tak static_cast może produkować nieweryfikowalny MSIL. Zobacz Kod czysty i weryfikowalny (C++/CLI) i Peverify.exe (narzędzie PEVerify) aby uzyskać więcej informacji o weryfikowalnym kodzie.

Jak static_cast, safe_cast wywołuje konwersje zdefiniowane przez użytkownika.

Aby uzyskać więcej informacji na temat funkcji cast, zobacz Operatory rzutowania.

safe_cast nie dotyczy const_cast (wyłączając const).

safe_cast jest w przestrzeni nazwy cli. Aby uzyskać więcej informacji, zobacz Przestrzeń nazw platformy, domyślna i cli (C++ Component Extensions).

Aby uzyskać więcej informacji na temat funkcji safe_cast, zobacz:

Wymagania

Opcja kompilatora: /clr

Przykłady

Przykład

Przykładem sytuacji, w której kompilator nie zaakceptuje static_cast, ale będzie akceptować safe_cast jest sytuacja, gdy stosowane jest rzutowanie między niepowiązanymi typami interfejsów. W przypadku użycia safe_cast kompilator nie wygeneruje błędu konwersji i wykona sprawdzenie w czasie wykonywania, aby sprawdzić, czy rzutowanie jest możliwe

// 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");
   }
}

Dane wyjściowe

  

Zobacz też

Koncepcje

Component Extensions dla platform środowiska uruchomieniowego