safe_cast (C++/CLI dan C++/CX)
Operasi safe_cast mengembalikan ekspresi yang ditentukan sebagai jenis yang ditentukan, jika berhasil; jika tidak, akan melemparkan InvalidCastException
.
Semua Runtime
(Tidak ada keterangan untuk fitur bahasa ini yang berlaku untuk semua runtime.)
Sintaks
[default]:: safe_cast< type-id >( expression )
Windows Runtime
safe_cast memungkinkan Anda mengubah jenis ekspresi tertentu. Dalam situasi di mana Anda sepenuhnya mengharapkan variabel atau parameter dapat dikonversi ke jenis tertentu, Anda dapat menggunakan safe_cast tanpa blok try-catch untuk mendeteksi kesalahan pemrograman selama pengembangan. Untuk informasi selengkapnya, lihat Casting (C++/CX).
Sintaks
[default]:: safe_cast< type-id >( expression )
Parameter
type-id
Jenis untuk mengonversi ekspresi ke. Handel ke jenis referensi atau nilai, jenis nilai, atau referensi pelacakan ke referensi atau jenis nilai.
expression
Ekspresi yang mengevaluasi ke handel ke jenis referensi atau nilai, jenis nilai, atau referensi pelacakan ke jenis referensi atau nilai.
Keterangan
safe_cast melemparkan InvalidCastException
jika tidak dapat mengonversi ekspresi ke jenis yang ditentukan oleh type-id. Untuk menangkap InvalidCastException
, tentukan opsi pengkompilasi /EH (Model Penanganan Pengecualian), dan gunakan pernyataan coba/tangkap.
Persyaratan
Opsi pengkompilasi: /ZW
Contoh
Contoh kode berikut menunjukkan cara menggunakan safe_cast dengan 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
Runtime Bahasa Umum
safe_cast memungkinkan Anda mengubah jenis ekspresi dan menghasilkan kode MSIL yang dapat diverifikasi.
Sintaks
[cli]:: safe_cast< type-id >( expression )
Parameter
type-id
Handel ke jenis referensi atau nilai, jenis nilai, atau referensi pelacakan ke referensi atau jenis nilai.
expression
Ekspresi yang mengevaluasi ke handel ke jenis referensi atau nilai, jenis nilai, atau referensi pelacakan ke jenis referensi atau nilai.
Keterangan
Ekspresi)
type-id>(
ekspresi safe_cast<
mengonversi ekspresi operand menjadi objek tipe-id.
Pengkompilasi akan menerima static_cast di sebagian besar tempat yang akan menerima safe_cast. Namun, safe_cast dijamin untuk menghasilkan MSIL yang dapat diverifikasi, sedangkan dapat menghasilkan MSIL yang static_cast
tidak dapat diverifikasi. Lihat Kode Murni dan Dapat Diverifikasi (C++/CLI) dan Peverify.exe (ALAT PEVerify) untuk informasi selengkapnya tentang kode yang dapat diverifikasi.
Seperti static_cast
, safe_cast memanggil konversi yang ditentukan pengguna.
Untuk informasi selengkapnya tentang cast, lihat Operator Casting.
safe_cast tidak menerapkan const_cast
(dibuang const
).
safe_cast berada di namespace cli. Lihat Namespace Platform, default, dan cli untuk informasi selengkapnya.
Untuk informasi selengkapnya tentang safe_cast, lihat:
Persyaratan
Opsi pengkompilasi: /clr
Contoh
Salah satu contoh di mana pengkompilasi tidak akan menerima static_cast
tetapi akan menerima safe_cast adalah untuk cast antara jenis antarmuka yang tidak terkait. Dengan safe_cast, pengkompilasi tidak akan mengeluarkan kesalahan konversi dan akan melakukan pemeriksaan pada runtime untuk melihat apakah pemeran dimungkinkan
// 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