Apakah ada alasan untuk lebih menyukai static_cast<>
casting gaya C? Apakah mereka setara? Apakah ada perbedaan kecepatan?
c++
casting
static-cast
dicroce
sumber
sumber
Jawaban:
Gips gaya C ++ diperiksa oleh kompiler. Gips gaya C tidak dan dapat gagal saat runtime.
Juga, pemeran gaya c ++ dapat dicari dengan mudah, sedangkan sangat sulit untuk mencari pemeran gaya c.
Manfaat besar lainnya adalah bahwa 4 pemeran gaya C ++ berbeda mengekspresikan maksud programmer dengan lebih jelas.
Saat menulis C ++ saya hampir selalu menggunakan yang C ++ di atas gaya C.
sumber
dynamic_cast
s.(int)something
tidak dapat gagal - Anda mendapatkan cast ke int atau compiler error.Singkatnya :
static_cast<>()
memberi Anda kemampuan memeriksa waktu kompilasi, pemeran C-Style tidak.static_cast<>()
lebih mudah dibaca dan dapat dilihat dengan mudah di mana saja di dalam kode sumber C ++, C_Style cast is'nt.Penjelasan Lebih Lanjut :
Para pemain statis melakukan konversi antara tipe-tipe yang kompatibel . Ini mirip dengan para pemeran C-style, tetapi lebih membatasi. Sebagai contoh, pemeran gaya-C akan memungkinkan pointer integer untuk menunjuk ke char.
Karena ini menghasilkan pointer 4-byte (pointer ke tipe data 4-byte) yang menunjuk ke 1 byte dari memori yang dialokasikan, menulis ke pointer ini akan menyebabkan kesalahan run-time atau akan menimpa beberapa memori yang berdekatan.
Berbeda dengan cast gaya-C, cast statis akan memungkinkan kompiler untuk memeriksa apakah tipe data pointer dan pointee kompatibel, yang memungkinkan programmer untuk menangkap tugas pointer yang salah ini selama kompilasi.
Anda juga dapat memeriksa halaman ini untuk penjelasan lebih lanjut tentang pemain C ++: Klik Di Sini
sumber
Lihat perbandingan dari operator casting C ++ .
sumber
sumber
Sebuah posting hebat yang menjelaskan berbagai pemeran di C / C ++, dan apa yang dilakukan pemeran gaya-C: https://anteru.net/blog/2007/12/18/200/index.html
sumber
static_cast
memeriksa pada waktu kompilasi bahwa konversi tidak antara jenis yang jelas tidak kompatibel. Berlawanan dengandynamic_cast
, tidak ada pemeriksaan untuk kompatibilitas tipe yang dilakukan pada saat run time. Juga,static_cast
konversi belum tentu aman.static_cast
digunakan untuk mengkonversi dari pointer ke kelas dasar ke pointer ke kelas turunan, atau antara tipe asli, seperti enum ke int atau float ke int.Pengguna
static_cast
harus memastikan bahwa konversi tersebut aman.Para pemeran C-style tidak melakukan pemeriksaan apa pun, baik pada saat kompilasi atau pada saat run time.
sumber
Karena ada berbagai jenis casting masing-masing dengan semantik yang berbeda, static_cast <> memungkinkan Anda untuk mengatakan "Saya sedang melakukan konversi legal dari satu jenis ke yang lain" seperti dari int ke double. Pemain gaya C biasa bisa berarti banyak hal. Apakah Anda casting up / down? Apakah Anda menafsirkan ulang pointer?
sumber