ใน C ไม่จำเป็นต้องส่ง a void *
ไปยังชนิดพอยน์เตอร์ใด ๆ มันได้รับการเลื่อนอย่างปลอดภัยเสมอ อย่างไรก็ตามใน C ++ นี่ไม่ใช่กรณี เช่น,
int *a = malloc(sizeof(int));
ทำงานใน C แต่ไม่ใช่ใน C ++ (หมายเหตุ: ฉันรู้ว่าคุณไม่ควรใช้malloc
ใน C ++ หรือสำหรับเรื่องnew
นั้นและควรเลือกสมาร์ทพอยน์เตอร์และ / หรือ STL แทนที่จะถามสิ่งนี้เพราะความอยากรู้อยากเห็น) ทำไมมาตรฐาน C ++ จึงไม่อนุญาตให้ใช้แบบจำลองนี้ ในขณะที่มาตรฐาน C ทำอะไร
sizeof(*a)
แทน
malloc
ไม่สามารถส่งกลับตัวชี้ไปยังประเภทที่จัดสรร new
คือ C ++ จะส่งคืนตัวชี้ไปยังประเภทที่จัดสรรดังนั้นโค้ด C ++ ที่เขียนอย่างถูกต้องจะไม่มีvoid *
การส่งต่อ
void
, C ทำไม่ได้ เมื่อคำหลัก / แนวคิดนั้นถูกเพิ่มใน C พวกเขาเปลี่ยนมันเพื่อให้เหมาะกับความต้องการของ C นั่นคือไม่นานหลังจากที่ประเภทตัวชี้เริ่มต้นการตรวจสอบในทุก ดูว่าคุณสามารถหาเอกสารอธิบาย K&R C ทางออนไลน์หรือสำเนาแบบดั้งเดิมของข้อความการเขียนโปรแกรม C เช่น Waite Group C Primer ANSI C นั้นเต็มไปด้วยคุณสมบัติที่ได้รับแรงบันดาลใจจาก C ++ และ K&R C นั้นง่ายกว่ามาก ดังนั้นมันจึงถูกต้องมากขึ้นที่ C ++ จะขยาย C ตามที่มีอยู่ในเวลานั้นและ C ที่คุณรู้ว่าถูกถอดจาก C ++
long *a = malloc(sizeof(int));
อ๊ะมีคนลืมเปลี่ยนประเภทเดียว!