C에서는 void *
다른 포인터 유형으로 a 를 캐스트 할 필요가 없으며 항상 안전하게 승격됩니다. 그러나 C ++에서는 그렇지 않습니다. 예 :
int *a = malloc(sizeof(int));
C에서는 작동하지만 C ++에서는 작동하지 않습니다. (참고 : malloc
C ++ 또는 그 문제 new
를 사용해서는 안되며 대신 스마트 포인터 및 / 또는 STL을 선호해야한다는 것을 알고 있습니다. 이것은 순전히 호기심에서 비롯됩니다.) C ++ 표준 이이 암시 적 캐스트를 허용하지 않는 이유는 무엇입니까? C 표준이하는 동안?
sizeof(*a)
대신 여전히 사용하여 쉽게 고칠 수 있습니다 .
malloc
할당 된 유형에 대한 포인터를 반환 할 수 없기 때문이라고 생각합니다. new
C ++은 할당 된 유형에 대한 포인터를 반환하므로 올바르게 작성된 C ++ 코드는 void *
캐스트 하지 않습니다 .
void
C가 없었습니다 . 해당 키워드 / 아이디어는 C에 추가되었을 때, 그들은 C의 필요에 맞게 변경되었습니다. 포인터 유형이 전혀 확인되지 않은 직후였습니다 . 온라인으로 K & R C 설명 팜플렛 또는 Waite Group의 C Primer 와 같은 C 프로그래밍 텍스트의 빈티지 사본을 찾을 수 있는지 확인하십시오 . ANSI C는 C ++에서 백 포트되거나 영감을 얻은 기능으로 가득 차 있었고 K & R C는 훨씬 간단했습니다. 따라서 C ++은 당시 존재했던대로 C를 확장하고 알고있는 C가 C ++에서 제거 된 것이 더 정확합니다.
long *a = malloc(sizeof(int));
죄송합니다. 누군가 한 가지 유형 만 변경하는 것을 잊었습니다!