Tuang Dinamik dan Statik dalam C
Konsep dynamic_cast dan static_cast dalam C boleh mengelirukan, terutamanya apabila berurusan dengan kelas polimorfik. Untuk memahami konsep ini dengan lebih baik, mari kita pertimbangkan persamaan C mereka dari perspektif tahap tinggi.
static_cast<>
static_cast<> operasi dalam C ialah cast masa kompilasi yang selamat. Ia memastikan bahawa destinasi dan jenis sumber adalah berkaitan, mencegah rasuah data. Jika jenis tidak berkaitan, ralat kompilasi akan berlaku.
Dalam contoh di bawah, static_cast<> operasi dengan selamat menghantar penuding ke kelas asas kepada penuding ke kelas terbitan:
class B {}; class D : public B {}; D* d = new D; B* b = static_cast<B*>(d); // Safe compile-time cast
dynamic_cast<>
Tidak seperti static_cast<>, dynamic_cast< > ialah pelakon masa larian. Ia menyemak pada masa jalan sama ada jenis sebenar penuding sepadan dengan jenis sasaran. Ia boleh mengendalikan pemutus kedua-duanya dari kelas asas kepada terbitan (B2D) dan terbitan kepada asas (D2B).
Untuk lakonan D2B, dynamic_cast<> hanya mengembalikan penunjuk NULL jika pelakon tidak sah. Walau bagaimanapun, untuk hantaran B2D, hierarki kelas mesti menyokong polimorfisme, bermakna sekurang-kurangnya satu fungsi maya mesti ditakrifkan dalam kelas asas.
Dalam contoh berikut, dynamic_cast<> digunakan untuk menghantar penuding dengan selamat ke kelas asas kepada penuding kepada kelas terbitan:
class Base { virtual void DoIt() = 0; }; class Foo : public Base {}; class Bar : public Base {}; Base* base = new Foo; Foo* foo = dynamic_cast<Foo*>(base); // Safe run-time cast
Jika pangkalan sebenarnya menghala ke objek Bar, dynamic_cast<> operasi akan mengembalikan NULL. Ini memastikan keselamatan jenis dan menghalang tingkah laku yang tidak ditentukan.
Atas ialah kandungan terperinci Apakah Perbezaan Antara `static_cast` dan `dynamic_cast` dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!