У 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));
На жаль, хтось забув змінити лише один тип!