safe_cast (C++/CLI ve C++/CX)
safe_cast işlemi belirtilen ifadeyi belirtilen tür olarak döndürür; başarılı olursa, aksi takdirde oluştururInvalidCastException
.
Tüm Çalışma Zamanları
(Bu dil özelliği için tüm çalışma zamanları için geçerli olan hiçbir açıklama yoktur.)
Sözdizimi
[default]:: safe_cast< type-id >( expression )
Windows Çalışma Zamanı
safe_cast, belirtilen ifadenin türünü değiştirmenize olanak tanır. Bir değişkenin veya parametrenin belirli bir türe dönüştürülebilir olmasını tam olarak beklediğiniz durumlarda, geliştirme sırasında programlama hatalarını algılamak için deneme yakalama bloğu olmadan safe_cast kullanabilirsiniz. Daha fazla bilgi için bkz . Atama (C++/CX).
Sözdizimi
[default]:: safe_cast< type-id >( expression )
Parametreler
type-id
İfadenin dönüştürülecek türü. Başvuru veya değer türünün tanıtıcısı, değer türü veya başvuruya veya değer türüne izleme başvurusu.
ifade
Bir başvuruya veya değer türüne, değer türüne veya başvuruya veya değer türüne yönelik izleme başvurusuna yönelik tanıtıcıyı değerlendiren ifade.
Açıklamalar
safe_cast, ifadeyi type-id ile belirtilen türe dönüştüremiyorsa oluştururInvalidCastException
. öğesini yakalamak InvalidCastException
için /EH (Özel Durum İşleme Modeli) derleyici seçeneğini belirtin ve try/catch deyimini kullanın.
Gereksinimler
Derleyici seçeneği: /ZW
Örnekler
Aşağıdaki kod örneği, Windows Çalışma Zamanı ile safe_cast nasıl kullanılacağını gösterir.
// 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
Ortak Dil Çalışma Zamanı
safe_cast bir ifadenin türünü değiştirmenize ve doğrulanabilir MSIL kodu oluşturmanıza olanak tanır.
Sözdizimi
[cli]:: safe_cast< type-id >( expression )
Parametreler
type-id
Başvuru veya değer türünün tanıtıcısı, değer türü veya başvuruya veya değer türüne izleme başvurusu.
ifade
Bir başvuruya veya değer türüne, değer türüne veya başvuruya veya değer türüne yönelik izleme başvurusuna yönelik tanıtıcıyı değerlendiren ifade.
Açıklamalar
type-id>(
ifadesisafe_cast<
)
, işlenen ifadeyi type-id türünde bir nesneye dönüştürür.
Derleyici, safe_cast kabul edeceği çoğu yerde bir static_cast kabul eder. Ancak, safe_cast doğrulanabilir MSIL üretmesi garanti edilirken, doğrulanamayan static_cast
MSIL üretebilir. Doğrulanabilir kod hakkında daha fazla bilgi için bkz. Saf ve Doğrulanabilir Kod (C++/CLI) ve Peverify.exe (PEVerify Tool).
gibi static_cast
, safe_cast kullanıcı tanımlı dönüştürmeleri çağırır.
Atamalar hakkında daha fazla bilgi için bkz . Atama İşleçleri.
safe_cast bir const_cast
uygulamaz (atılmazconst
).
safe_cast cli ad alanındadır. Daha fazla bilgi için bkz . Platform, varsayılan ve cli Ad Alanları .
safe_cast hakkında daha fazla bilgi için bkz:
Gereksinimler
Derleyici seçeneği: /clr
Örnekler
Derleyicinin safe_cast static_cast
kabul etmediği ancak kabul edeceği bir örnek, ilişkisiz arabirim türleri arasındaki atamalara yöneliktir. safe_cast ile derleyici dönüştürme hatası vermez ve atamanın mümkün olup olmadığını görmek için çalışma zamanında bir denetim gerçekleştirir
// 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