У C немає необхідності призначати void *будь-який інший тип вказівника, він завжди безпечно просувається. Однак у C ++ це не так. Наприклад,
int *a = malloc(sizeof(int));
працює в C, але не в C ++. (Примітка. Я знаю, що ви не повинні використовувати mallocв C ++, або в цьому питанні new, і натомість слід віддавати перевагу розумним покажчикам та / або STL; це запитується з цікавості) Чому стандарт C ++ не дозволяє це неявне відтворення, в той час як стандарт C робить?
sizeof(*a)натомість.
mallocне може повернути вказівник на виділений тип. new"C ++" повертає вказівник на виділений тип, тому правильно написаний код C ++ ніколи не матиме жодного void *s.
void, C - ні . Коли це ключове слово / ідею було додано до C, вони змінили його відповідно до потреб C. Це було незабаром після того, як типи вказівників взагалі почали перевіряти . Перегляньте, чи можна знайти брошуру з описом K&R C в Інтернеті чи старовинну копію тексту програмування на C, наприклад C Primer букваря Waite Group . У ANSI C було багато функцій, що підтримуються або надихаються C ++, а K&R C - набагато простіше. Тож правильніше, що C ++ розширив C, як він існував у той час, а C, який ви знаєте, був позбавлений C ++.
long *a = malloc(sizeof(int));На жаль, хтось забув змінити лише один тип!