Em C, não há necessidade de converter a void *
em qualquer outro tipo de ponteiro, pois ele é sempre promovido com segurança. No entanto, em C ++, este não é o caso. Por exemplo,
int *a = malloc(sizeof(int));
funciona em C, mas não em C ++. (Observação: eu sei que você não deve usar malloc
em C ++ ou, nesse caso new
, e preferir ponteiros inteligentes e / ou o STL; isso é solicitado apenas por curiosidade) Por que o padrão C ++ não permite essa conversão implícita, enquanto o padrão C faz?
sizeof(*a)
.
malloc
não é possível retornar um ponteiro para o tipo alocado. new
é C ++ retorna um ponteiro para o tipo alocado, portanto, o código C ++ escrito corretamente nunca terá nenhum void *
s para transmitir.
void
, C fez não . Quando essa palavra-chave / ideia foi adicionada a C, ela foi alterada para se adequar às necessidades de C. Isso foi logo após tipos de ponteiro começou a ser verificado em tudo . Veja se você pode encontrar on-line o panfleto de descrição da K&R C ou uma cópia vintage de um texto de programação em C, como o C Primer do Waite Group . O ANSI C estava cheio, com recursos suportados ou inspirados em C ++, e o K&R C era muito mais simples. Portanto, é mais correto que o C ++ estendeu o C como existia na época e o C que você conhece foi retirado do C ++.
long *a = malloc(sizeof(int));
Ops, alguém esqueceu de alterar apenas um tipo!