Dalam C, tidak perlu untuk melemparkan void *
ke tipe pointer lain, itu selalu dipromosikan dengan aman. Namun, dalam C ++, ini tidak terjadi. Misalnya,
int *a = malloc(sizeof(int));
bekerja di C, tetapi tidak di C ++. (Catatan: Saya tahu bahwa Anda tidak boleh menggunakan malloc
C ++, atau dalam hal ini new
, dan lebih baik memilih smart pointer dan / atau STL; ini diminta murni karena penasaran) Mengapa standar C ++ tidak mengizinkan pemeran tersirat ini, sedangkan standar C tidak?
sizeof(*a)
sebagai gantinya.
malloc
tidak dapat mengembalikan pointer ke tipe yang dialokasikan. new
adalah C ++ mengembalikan pointer ke tipe yang dialokasikan, jadi kode C ++ yang ditulis dengan benar tidak akan pernah ada void *
untuk dilemparkan.
void
, C tidak . Ketika kata kunci / ide itu ditambahkan ke C, mereka mengubahnya sesuai dengan kebutuhan C. Itu tidak lama setelah tipe pointer mulai diperiksa sama sekali . Lihat apakah Anda dapat menemukan pamflet deskripsi K&R C online, atau salinan vintage dari teks pemrograman C seperti C Primer Waite Group . ANSI C penuh, fitur yang didukung atau diilhami oleh C ++, dan K&R C jauh lebih sederhana. Jadi itu lebih benar bahwa C ++ diperpanjang C seperti yang ada pada saat itu, dan C yang Anda tahu dilucuti dari C ++.
long *a = malloc(sizeof(int));
Ups, seseorang lupa mengubah hanya satu jenis!