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.
Ifa -de
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.
Ifa -de
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 Aracı).
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
Ayrıca bkz.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin