Teknik hantaran gaya C tradisional, seperti hantaran gaya fungsi mudah atau hantaran menggunakan sintaks gaya C, selalunya gagal membezakan antara jenis operasi hantaran yang berbeza. Ini boleh menyebabkan kekeliruan dan kemungkinan ralat. static_cast
static_cast melakukan penukaran yang selamat antara jenis yang berkaitan dengan tugasan atau warisan. Ia selamat apabila penukaran yang sah wujud atau apabila terdapat pembina yang sesuai untuk membolehkan penukaran itu mungkin. Sebaliknya, reinterpret_cast atau const_cast sentiasa berbahaya dan memerlukan pengaturcara untuk memastikan pengkompil secara jelas bahawa mereka tahu apa yang mereka lakukan.
Pertimbangkan contoh berikut:
class CDerivedClass : public CMyBase {...}; class CMyOtherStuff {...} ; CMyBase *pSomething; // filled somewhere
Dua pelakon berikut disusun secara identik dan kedua-duanya selamat:
CDerivedClass *pMyObject; pMyObject = static_cast<CDerivedClass*>(pSomething); pMyObject = (CDerivedClass*)pSomething;
Walau bagaimanapun, apabila menghantar kepada jenis yang tidak berkaitan, static_cast akan menghasilkan ralat pengkompil, manakala penghantaran tradisional tidak akan:
CMyOtherStuff *pOther; // Compiler error: Can't convert pOther = static_cast<CMyOtherStuff*>(pSomething); // No compiler error, but dangerous pOther = (CMyOtherStuff*)pSomething;
Bahan gaya C tradisional juga lebih sukar dibaca dan dikesan dalam kod, terutamanya dalam ungkapan kompleks. Sebagai perbandingan, static_cast dan sintaks casting moden yang lain lebih mudah dikenal pasti, menjadikannya lebih mudah untuk memastikan ketepatannya. Ini amat berguna untuk alat analisis kod automatik.
Dengan menggunakan static_cast
Atas ialah kandungan terperinci Mengapa Menggunakan `static_cast` ke atas Tradisional C-Style Casting dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!