Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Topik berikut hanya berlaku untuk Common Language Runtime.
Saat digunakan dengan jenis CLR, pengkompilasi mencoba memetakan transmisi gaya C ke salah satu cast yang tercantum di bawah ini, dalam urutan berikut:
const_cast
safe_cast
safe_cast plus const_cast
static_cast
static_cast plus const_cast
Jika tidak ada cast yang tercantum di atas yang valid, dan jika jenis ekspresi dan jenis target adalah jenis referensi CLR, pemetaan cast gaya C ke pemeriksaan runtime (instruksi castclass MSIL). Jika tidak, pemeran gaya C dianggap tidak valid dan pengkompilasi mengeluarkan kesalahan.
Keterangan
Pemeran gaya C tidak disarankan. Saat mengkompilasi dengan /clr (Common Language Runtime Compilation), gunakan safe_cast.
Sampel berikut menunjukkan pemeran gaya C yang memetakan ke const_cast.
// cstyle_casts_1.cpp
// compile with: /clr
using namespace System;
ref struct R {};
int main() {
const R^ constrefR = gcnew R();
R^ nonconstR = (R^)(constrefR);
}
Contoh berikut menunjukkan pemeran gaya C yang memetakan ke safe_cast.
// cstyle_casts_2.cpp
// compile with: /clr
using namespace System;
int main() {
Object ^ o = "hello";
String ^ s = (String^)o;
}
Sampel berikut menunjukkan pemeran gaya C yang memetakan ke safe_cast ditambah const_cast.
// cstyle_casts_3.cpp
// compile with: /clr
using namespace System;
ref struct R {};
ref struct R2 : public R {};
int main() {
const R^ constR2 = gcnew R2();
try {
R2^ b2DR = (R2^)(constR2);
}
catch(InvalidCastException^ e) {
System::Console::WriteLine("Invalid Exception");
}
}
Sampel berikut menunjukkan pemeran gaya C yang memetakan ke static_cast.
// cstyle_casts_4.cpp
// compile with: /clr
using namespace System;
struct N1 {};
struct N2 {
operator N1() {
return N1();
}
};
int main() {
N2 n2;
N1 n1 ;
n1 = (N1)n2;
}
Sampel berikut menunjukkan pemeran gaya C yang memetakan ke static_cast plus const_cast.
// cstyle_casts_5.cpp
// compile with: /clr
using namespace System;
struct N1 {};
struct N2 {
operator const N1*() {
static const N1 n1;
return &n1;
}
};
int main() {
N2 n2;
N1* n1 = (N1*)(const N1*)n2; // const_cast + static_cast
}
Contoh berikut menunjukkan pemeran gaya C yang memetakan ke pemeriksaan run-time.
// cstyle_casts_6.cpp
// compile with: /clr
using namespace System;
ref class R1 {};
ref class R2 {};
int main() {
R1^ r = gcnew R1();
try {
R2^ rr = ( R2^)(r);
}
catch(System::InvalidCastException^ e) {
Console::WriteLine("Caught expected exception");
}
}
Sampel berikut menunjukkan pemeran gaya C yang tidak valid, yang menyebabkan pengkompilasi mengeluarkan kesalahan.
// cstyle_casts_7.cpp
// compile with: /clr
using namespace System;
int main() {
String^s = S"hello";
int i = (int)s; // C2440
}
Persyaratan
Opsi pengkompilasi: /clr