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:
Porady: korzystanie z polecenia safe_cast w języku C++/interfejsie wiersza polecenia
Porady: korzystanie z polecenia safe_cast i konwersji zdefiniowanych przez użytkownika
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