Menggunakan static_cast
Bahan gaya C Klasik , dikenali sebagai (T)x, kumpulkan berbilang operasi pemutus yang berbeza di bawah satu sintaks. Ini boleh menyebabkan kekeliruan dan kemungkinan ralat, kerana pengkompil tidak membezakan antara static_cast, reinterpret_cast, const_cast dan dynamic_cast.
Kelebihan static_cast
static_cast
Bahaya daripada Pelakon Gaya-C
gaya-C lakonan, walau bagaimanapun, sememangnya berbahaya:
Contoh Penghantaran Selamat dan Tidak Selamat
Pertimbangkan kod berikut:
class CDerivedClass : public CMyBase { }; class CMyOtherStuff { }; CMyBase *pSomething; // filled somewhere CDerivedClass *pMyObject; pMyObject = static_cast<CDerivedClass*>(pSomething); // Safe; as long as we checked CMyOtherStuff *pOther; pOther = static_cast<CMyOtherStuff*>(pSomething); // Compiler error: Can't convert pOther = (CMyOtherStuff*)pSomething; // No compiler error. // Same as reinterpret_cast<> // and it's wrong!!!
Bahan_statik dalam baris pertama dengan jelas menyampaikan penukaran yang dimaksudkan dan menyediakan pemeriksaan keselamatan. Pelakon gaya C dalam baris kedua, bagaimanapun, tidak selamat dan boleh menyebabkan ralat masa jalan, kerana ia cuba menukar jenis yang tidak berkaitan tanpa langkah berjaga-jaga yang sesuai.
Atas ialah kandungan terperinci Mengapa Menggunakan `static_cast(x)` Daripada `(T)x` untuk Safer C Casting?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!