C'de, void *
herhangi bir işaretçi tipine bir a kullanmaya gerek yoktur , her zaman güvenli bir şekilde teşvik edilir. Ancak, C ++, bu durum böyle değil. Örneğin,
int *a = malloc(sizeof(int));
C ile çalışır, ancak C ++ ile çalışmaz. (Not: malloc
C ++ 'da veya bu konuda new
kullanmamanız gerektiğini ve bunun yerine akıllı göstericileri ve / veya STL'yi tercih etmeniz gerektiğini biliyorum ; bu tamamen meraktan sorulur.) C ++ standardı neden bu gizli kullanıma izin vermiyor? C standardı ne zaman?
sizeof(*a)
yerine hala kolayca düzeltilebilir .
malloc
, tahsis edilen tipe bir gösterici döndürememesi olduğuna inanıyorum . new
C ++, atanan türe bir gösterici döndürür, bu yüzden doğru yazılmış C ++ kodunu kullanmak için hiçbir zaman void *
s yazmaz .
void
C yaptım değil . Söz konusu anahtar kelime / fikri C'ye ilave edildiğinde bunlar C'nin ihtiyaçlarına uygun şekilde değiştirdi. İşaretçi tipleri kontrol başlandı sonra bu kısa bir süre oldu hiç . Çevrimiçi K&R C tanıtım broşürünü veya Waite Group'un C Astarı gibi bir C programlama metninin eski bir kopyasını bulabilecek misiniz bir bakın . ANSI C doluydu, C ++ tarafından desteklenen ya da esinlenilen özellikler ve K&R C çok daha kolaydı. Bu nedenle, C ++ 'ın o anda C olduğu kadar genişledi ve bildiğiniz C ise C ++' dan çıkarıldı.
long *a = malloc(sizeof(int));
Hata! Birisi sadece bir tip değiştirmeyi unuttu!