пустые указатели: разница между 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 ++?