Почему оператору new разрешено возвращать * void для каждого типа указателя?

В C ++ не разрешается назначать указатель void * любому целочисленному указателю без явного приведения. Это требует использования static_cast.

Но что с этим:

int* iptr = new int;

Я знаю, что новый оператор определяется следующим образом:

void* operator new(size_t);

Как C ++ справляется с этим? Я знаю, что это базовый вопрос, но важный. Я также знаю, что код низкого уровня должен использовать void. Но как это задание может быть законным? iptr - это указатель на int, а new возвращает указатель на void, что должно вызвать сообщение типа «ошибка: недопустимое преобразование из« void * »в« int * »[-fpermissive]».

9
задан Peter 22 January 2012 в 16:11
поделиться