пустые указатели: разница между C и C ++

Я пытаюсь понять различия между C и C ++ относительно пустых указателей. следующие компиляции в C, но не в C ++ (все компиляции выполняются с помощью gcc / g ++ -ansi -pedantic -Wall):

int* p = malloc(sizeof(int));

Потому чтоmalloc возвращаетсяvoid*, который C ++ не позволяет назначитьint* в то время как С это позволяет.

Однако здесь:

void foo(void* vptr)
{
}

int main()
{
    int* p = (int*) malloc(sizeof(int));
    foo(p);
    return 0;
}

И C ++, и C компилируют его без жалоб. Почему?

K & R2 говорят:

Любой указатель на объект может быть преобразован в типvoid * без потери информации. Если результат преобразуется обратно в исходный тип указателя, исходный указатель восстанавливается.

И это довольно суммирует все, что есть оvoid* преобразования в C. Что диктует стандарт C ++?

Ответы на вопрос(3)

Ваш ответ на вопрос