[conv.ptr]
Изменение: для преобразования void* в тип указателя на объект требуется приведение типов.
char a[10]; void* b=a; void foo() { char* c=b; }
ISO C примет такое использование указателя на void, присвоенного указателю на тип объекта. C ++ не будет.
Обоснование:
C ++ больше старается, чем C, обеспечить безопасность типов во время компиляции.
Влияние на исходный объект:
удаление семантически четко определенного объекта.
Сложность конвертации:
Можно автоматизировать. Нарушения диагностирует переводчик C ++. Исправление заключается в добавлении литья. Например:
char* c = (char*) b;
Насколько широко используется:
это довольно широко используется, но хорошая практика программирования - добавлять приведение при назначении указателя на пустоту для указателя на объект. Некоторые переводчики ISO C выдают предупреждение, если приведение не используется.