Rumah > pembangunan bahagian belakang > C++ > Apakah Perbezaan Antara `static_cast` dan `dynamic_cast` dalam C ?

Apakah Perbezaan Antara `static_cast` dan `dynamic_cast` dalam C ?

Linda Hamilton
Lepaskan: 2024-12-04 01:42:11
asal
389 orang telah melayarinya

What's the Difference Between `static_cast` and `dynamic_cast` in C  ?

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
Salin selepas log masuk

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
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan