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 mallocC ++, 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.
malloctidak dapat mengembalikan pointer ke tipe yang dialokasikan. newadalah 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!